symfony配置文件之三:routing和路由配置
目录
1、创建路由
2、查看路由列表
3、本地化路由(i18n)
4、添加requirements (针对url占位符或host占位符)
1)类正则 Regex Requirements
2)HTTP Method Requirements
3)Host-Based Requirements
在主机名中使用占位符
导入路由的主机匹配
测试控制器
4)Dynamic Requirements with Condition Expressions 通过条件限制路由匹配
漂亮的路由对任何一个WEB应用而言都是刚需。这意味着我们要抛弃类似 index.php?article_id=57
这样丑陋的URL, 而使用像 /read/intro-to-symfony
语义化的url。
灵活性也是非常重要的。 如果你需要把你页面所有的/blog
变成/news?
,你要查找多少次, 替换多少次? 如果你使用Symfony的路由器, 那改个URL什么的就变得非常非常简单。
Symfony路由器可以让你定义出各种个性化的URL, 映射到你应用的各个地方。了解完这个章节后, 你会:
创建复杂的路由映射到控制器在控制器和模板中生成URL从包中加载路由资源(或者说任何地方)调试路由
1、创建路由
简单说,路由就是一个从URL路径到控制器映射。 如果你想匹配 /blog
,以及类似 /blog/my-post
或 /blog/all-about-symfony
的URL路径,并且将它们分发到对应的控制器,并且渲染一个blog实体.。要实现这个功能非常简单,主要有一下几种方法:
--------通过注释定义路由
--------通过yaml配置文件定义路由
--------通过xml配置文件定义路由
--------通过php配置文件定义路由
路由可以在YAML,XML和PHP中配置,所有格式都提供相同的功能和性能,因此请选择您喜欢的格式。如果选择PHP注释,请在应用程序中运行此命令一次以添加对它们的支持:
$ composer require annotations
现在,您可以配置路由:
注释形式
// src/Controller/BlogController.php
namespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;class BlogController extends AbstractController
{/*** Matches /blog exactly** @Route("/blog", name="blog_list")*/public function list(){// ...}/*** Matches /blog/*** @Route("/blog/{slug}", name="blog_show")*/public function show($slug){// $slug will equal the dynamic part of the URL// e.g. at /blog/yay-routing, then $slug='yay-routing'// ...}
}
YAML文件
# config/routes.yaml
blog_list:path: /blogcontroller: App\Controller\BlogController::listblog_show:path: /blog/{slug}controller: App\Controller\BlogController::show
XML文件
<!-- config/routes.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/routinghttp://symfony.com/schema/routing/routing-1.0.xsd"><route id="blog_list" path="/blog" controller="App\Controller\BlogController::list"><!-- settings --></route><route id="blog_show" path="/blog/{slug}" controller="App\Controller\BlogController::show"><!-- settings --></route>
</routes>
PHP文件
// config/routes.php
namespace Symfony\Component\Routing\Loader\Configurator;use App\Controller\BlogController;return function (RoutingConfigurator $routes) {$routes->add('blog_list', '/blog')->controller([BlogController::class, 'list']);$routes->add('blog_show', '/blog/{slug}')->controller([BlogController::class, 'show']);
};
- 如果去匹配路径 /blog,那么将执行第一条路由,并且 list() 方法被调用。
- 如果去匹配 /blog/*,那么将执行第一条路由,并且 show() 方法被调用。由于路由的路径设置为 /blog/{slug},那么 /blog/ 后面的字符串,将传递给 show() 方法的参数 $slug。例如,如果去匹配 /blog/yay-routing,那么参数 $slug 将被赋值为字符串"yay-routing"
。
只要您的路径中有一个{placeholder}
占位符,该部分就会成为通配符:它匹配任何值。现在,您的控制器也可以拥有一个$placeholder
参数(此处,通配符和参数名称必须匹配)。
2、查看路由列表
随着应用程序的开发,最终将拥有大量的路由。要查看所有的路由列表,请运行:
$ php bin/console debug:router
------------------------------ -------- -------------------------------------
Name Method Path
------------------------------ -------- -------------------------------------
app_lucky_number ANY /lucky/number/{max}
...
------------------------------ -------- -------------------------------------
3、本地化路由(i18n)
路由可以本地化,以提供一个与区域相关的唯一路径。Symfony提供了一种方便的方式来声明本地化路由,且无需重复声明。
注释
// src/Controller/CompanyController.php
namespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;class CompanyController extends AbstractController
{/*** @Route({* "nl": "/over-ons",* "en": "/about-us"* }, name="about_us")*/public function about(){// ...}
}
YAML文件
# config/routes.yaml
about_us:path:nl: /over-onsen: /about-uscontroller: App\Controller\CompanyController::about
XML文件
<!-- config/routes.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/routinghttp://symfony.com/schema/routing/routing-1.0.xsd"><route id="about_us" controller="App\Controller\CompanyController::about"><path locale="nl">/over-ons</path><path locale="en">/about-us</path></route>
</routes>
PHP文件
// config/routes.php
namespace Symfony\Component\Routing\Loader\Configurator;use App\Controller\CompanyController;return function (RoutingConfigurator $routes) {$routes->add('about_us', ['nl' => '/over-ons', 'en' => '/about-us'])->controller([CompanyController::class, 'about']);
};
当本地化路由被匹配时,Symfony就会自动知道在请求期间应使用哪个区域的设置。以这种方式定义路由,消除了对路由重复注册的需要,同时最小化了由定义不一致引起的任何错误风险。
notes
如果应用程序使用 “完整语言 + 领土区域设置”(例如fr_FR
, fr_BE
),你可以在你的路由中仅仅使用语言部分(如fr
)。当您希望为共享相同语言的语言环境使用相同的路径时,这可以防止必须定义多个路径。
国际化应用程序的一个常见要求是,为所有路由添加前缀。这可以通过为每个语言环境定义不同的前缀来完成(如果您愿意,可以为默认语言环境设置一个空前缀):
YAML文件
# config/routes/annotations.yaml
controllers:resource: '../../src/Controller/'type: annotationprefix:en: '' # don't prefix URLs for English, the default localenl: '/nl'
XML文件
<!-- config/routes/annotations.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/routinghttp://symfony.com/schema/routing/routing-1.0.xsd"><import resource="../src/Controller/" type="annotation"><!-- don't prefix URLs for English, the default locale --><prefix locale="en"></prefix><prefix locale="nl">/nl</prefix></import>
</routes>
PHP文件
// config/routes/annotations.php
namespace Symfony\Component\Routing\Loader\Configurator;return function (RoutingConfigurator $routes) {$routes->import('../src/Controller/', 'annotation')->prefix([// don't prefix URLs for English, the default locale'en' => '','nl' => '/nl']);
};
4、添加requirements (针对url占位符或host占位符)
想象一下,该 blog_list路由将包含一个分页的 blog post 列表,其中包含/blog/2和/blog/3来表示
第2页和第3页的URL 。如果您更改路由的路径为 /blog/{page}
,则会遇到问题:
- blog_list: /blog/{page} 会匹配 /blog/* ;
- blog_show:/blog/{slug} 将同样匹配 /blog/* 。
当两个路由匹配相同的URL时,加载的第一个路由获胜。不幸的是,这意味着/blog/yay-routing
将匹配 blog_list
。这是个比较严重的问题。
为了解决这个问题,增加 requirements 属性来限制通配符{page}只能
匹配数字:
注释形式
// src/Controller/BlogController.php
namespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;class BlogController extends AbstractController
{/*** @Route("/blog/{page}", name="blog_list", requirements={"page"="\d+"})*/public function list($page){// ...}/*** @Route("/blog/{slug}", name="blog_show")*/public function show($slug){// ...}
}
YAML文件
# config/routes.yaml
blog_list:path: /blog/{page}controller: App\Controller\BlogController::listrequirements:page: '\d+'blog_show:# ...
XML文件
<!-- config/routes.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/routinghttp://symfony.com/schema/routing/routing-1.0.xsd"><route id="blog_list" path="/blog/{page}" controller="App\Controller\BlogController::list"><requirement key="page">\d+</requirement></route><!-- ... -->
</routes>
PHP文件
// config/routes.php
namespace Symfony\Component\Routing\Loader\Configurator;use App\Controller\BlogController;return function (RoutingConfigurator $routes) {$routes->add('blog_list', '/blog/{page}')->controller([BlogController::class, 'list'])->requirements(['page' => '\d+']);// ...
};
这个\d+
是一个匹配任意长度数字的正则表达式。现在:
网址 |
路线 |
参数 |
---|---|---|
/blog/2
|
blog_list
|
$page = 2
|
/blog/yay-routing
|
blog_show
|
$slug = yay-routing
|
如果您愿意,也可以使用{placeholder_name<requirements>}
语法,在每个占位符中后面使用<>写成同行形式 。此功能使配置更简洁,但是当需求复杂时,它降低了路由的可读性:
注释形式
// src/Controller/BlogController.php
namespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;class BlogController extends AbstractController
{/*** @Route("/blog/{page<\d+>}", name="blog_list")*/public function list($page){// ...}
}
YAML形式
# config/routes.yaml
blog_list:path: /blog/{page<\d+>}controller: App\Controller\BlogController::list
XML形式
<!-- config/routes.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/routinghttp://symfony.com/schema/routing/routing-1.0.xsd"><route id="blog_list" path="/blog/{page<\d+>}" controller="App\Controller\BlogController::list" /><!-- ... -->
</routes>
PHP文件
// config/routes.php
namespace Symfony\Component\Routing\Loader\Configurator;use App\Controller\BlogController;return function (RoutingConfigurator $routes) {$routes->add('blog_list', '/blog/{page<\d+>}')->controller([BlogController::class, 'list']);// ...
};
定义requirements的语法总结:
1)类正则 Regex Requirements
如多语言本地化枚举的实现:
注释形式
// src/Controller/MainController.php// ...
class MainController extends AbstractController
{/*** @Route("/{_locale}", defaults={"_locale"="en"}, requirements={* "_locale"="en|fr"* })*/public function homepage($_locale){}
}
YAML文件
# config/routes.yaml
homepage:path: /{_locale}controller: App\Controller\MainController::homepagedefaults: { _locale: en }requirements:_locale: en|fr
XML文件
<!-- config/routes.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/routinghttp://symfony.com/schema/routing/routing-1.0.xsd"><route id="homepage" path="/{_locale}" controller="App\Controller\MainController::homepage"><default key="_locale">en</default><requirement key="_locale">en|fr</requirement></route>
</routes>
PHP文件
// config/routes.php
namespace Symfony\Component\Routing\Loader\Configurator;use App\Controller\MainController;return function (RoutingConfigurator $routes) {$routes->add('homepage', '/{_locale}')->controller([MainController::class, 'homepage'])->defaults(['_locale' => 'en',])->requirements(['_locale' => 'en|fr',]);
};
对于传入的请求,URL 的{_locale}
部分与正则表达式(en|fr)
匹配。
路径 | 参数 |
---|---|
/
|
{_locale} = "en"
|
/en
|
{_locale} = "en"
|
/fr
|
{_locale} = "fr"
|
/es
|
不符合这条路线 |
注意
在声明或导入路由时,通过设置utf8
选项,可以启用UTF-8路由匹配。这将使得例如 在requirements中的 .
将匹配任何UTF-8字符而不是单个字节。
提示:
路由requirements还可以包括容器参数,如本文中所述。当正则表达式非常复杂,并在您的应用程序中重复使用时,这会派上用场。如:
# config/routes.yaml
contact:path: /{_locale}/contactcontroller: App\Controller\MainController::contactrequirements:_locale: '%app.locales%'
2)HTTP Method Requirements
除了URL之外,您还可以匹配传入请求的方法(即GET,HEAD,POST,PUT,DELETE)。假设,您为博客创建了一个API,并且您有两条路由:一条用于显示帖子(在GET或HEAD请求上),另一条用于更新帖子(在PUT请求中)。这可以通过以下路由配置来完成:
注释形式
// src/Controller/BlogApiController.php
namespace App\Controller;// ...class BlogApiController extends AbstractController
{/*** @Route("/api/posts/{id}", methods={"GET","HEAD"})*/public function show($id){// ... return a JSON response with the post}/*** @Route("/api/posts/{id}", methods={"PUT"})*/public function edit($id){// ... edit a post}
}
YAML文本
# config/routes.yaml
api_post_show:path: /api/posts/{id}controller: App\Controller\BlogApiController::showmethods: GET|HEADapi_post_edit:path: /api/posts/{id}controller: App\Controller\BlogApiController::editmethods: PUT
XML文本
<!-- config/routes.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/routinghttp://symfony.com/schema/routing/routing-1.0.xsd"><route id="api_post_show"path="/api/posts/{id}"controller="App\Controller\BlogApiController::show"methods="GET|HEAD" /><route id="api_post_edit"path="/api/posts/{id}"controller="App\Controller\BlogApiController::edit"methods="PUT" />
</routes>
PHP文本
// config/routes.php
namespace Symfony\Component\Routing\Loader\Configurator;use App\Controller\BlogApiController;return function (RoutingConfigurator $routes) {$routes->add('api_post_show', '/api/posts/{id}')->controller([BlogApiController::class, 'show'])->methods(['GET', 'HEAD']);$routes->add('api_post_edit', '/api/posts/{id}')->controller([BlogApiController::class, 'edit'])->methods(['PUT']);// or use collection$api = $routes->collection('api_post_')->prefix('/api/posts/{id}');$api->add('show')->controller([BlogApiController::class, 'show'])->methods(['GET', 'HEAD']);$api->add('edit')->controller([BlogApiController::class, 'edit'])->methods(['PUT']);
};
尽管这两条路由具有相同的路径(/api/posts/{id}),但第一条路径仅匹配GET或HEAD请求,第二条路径仅匹配PUT请求。这意味着,您可以使用相同的URL显示和编辑帖子,同时为这两个操作使用不同的控制器。
注意
如果未指定methods
,则路由将匹配所有方法。
提示:
如果您使用HTML表单和HTTP方法,而不是GET
和POST
,那么你需要包括一个_method
参数来伪装HTTP方法。有关更多信息,请参见 如何更改窗体的操作和方法。
3)Host-Based Requirements
您还可以对传入请求的HTTP 主机,进行路由匹配。这种Requirements主要用于限制请求的来源。如:
注释形式
// src/Controller/MainController.php
namespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;class MainController extends AbstractController
{/*** @Route("/", name="mobile_homepage", host="m.example.com")*/public function mobileHomepage(){// ...}/*** @Route("/", name="homepage")*/public function homepage(){// ...}
}
YAML文件
# config/routes.yaml
mobile_homepage:path: /host: m.example.comcontroller: App\Controller\MainController::mobileHomepagehomepage:path: /controller: App\Controller\MainController::homepage
XML文件
<!-- config/routes.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/routinghttp://symfony.com/schema/routing/routing-1.0.xsd"><route id="mobile_homepage"path="/"host="m.example.com"controller="App\Controller\MainController::mobileHomepage" /><route id="homepage" path="/" controller="App\Controller\MainController::homepage" />
</routes>
PHP文件
// config/routes.php
namespace Symfony\Component\Routing\Loader\Configurator;use App\Controller\MainController;return function (RoutingConfigurator $routes) {$routes->add('mobile_homepage', '/')->controller([MainController::class, 'mobileHomepage'])->host('m.example.com');$routes->add('homepage', '/')->controller([MainController::class, 'homepage']);
};return $routes;
两条路径匹配相同的路径/
,但第一条路径仅在主机为m.example.com
时匹配。
在主机名中使用占位符
此外,主机名与路径匹配系统拥有相同的语法,这就意味着可以在主机名中使用占位符,如{project}等。占位符也可以使用defaults设置和requirements设置,并且占位符的requirements规则也可使用服务参数。如下所示:
注释形式
// src/Controller/MainController.php
namespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;class MainController extends AbstractController
{/*** @Route(* "/",* name="mobile_homepage",* host="m.{domain}",* defaults={"domain"="%domain%"},* requirements={"domain"="%domain%"}* )*/public function mobileHomepage(){// ...}/*** @Route("/", name="homepage")*/public function homepage(){// ...}
}
YAML形式
# config/routes.yaml
mobile_homepage:path: /host: "m.{domain}"controller: App\Controller\MainController::mobileHomepagedefaults:domain: '%domain%'requirements:domain: '%domain%'homepage:path: /controller: App\Controller\MainController::homepage
XML文件
<!-- config/routes.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/routinghttp://symfony.com/schema/routing/routing-1.0.xsd"><route id="mobile_homepage"path="/"host="m.{domain}"controller="App\Controller\MainController::mobileHomepage"><default key="domain">%domain%</default><requirement key="domain">%domain%</requirement></route><route id="homepage" path="/" controller="App\Controller\MainController::homepage" />
</routes>
PHP文件
// config/routes.php
namespace Symfony\Component\Routing\Loader\Configurator;use App\Controller\MainController;return function (RoutingConfigurator $routes) {$routes->add('mobile_homepage', '/')->controller([MainController::class, 'mobileHomepage'])->host('m.{domain}')->defaults(['domain' => '%domain%',])->requirements(['domain' => '%domain%',]);$routes->add('homepage', '/')->controller([MainController::class, 'homepage']);
};
导入路由的主机匹配
最后,我们还可以使用导入路由的主机匹配,在导入路由的路径上设置主机选项。如下所示:
注释形式
// src/Controller/MainController.php
namespace Acme\HelloBundle\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;/*** @Route(host="hello.example.com")*/
class MainController extends AbstractController
{// ...
}
YAML文件
# config/routes.yaml
app_hello:resource: '@AcmeHelloBundle/Resources/config/routing.yaml'host: "hello.example.com"controller: Acme\HelloBundle\Controller\MainController # 自行修改后添加,???
# 以上注释形式的路由定义,是在MainController下的路由代入,为什么在配置文件中没有体现呢?
XML文件
<!-- config/routes.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/routinghttp://symfony.com/schema/routing/routing-1.0.xsd"> <import resource="@AcmeHelloBundle/Resources/config/routing.xml" host="hello.example.com" />
</routes>
PHP文件
// config/routes.php
$routes = $loader->import("@AcmeHelloBundle/Resources/config/routing.php");
$routes->setHost('hello.example.com');return $routes;
测试控制器
如果要在功能测试中获取过去的url匹配,则需要在请求对象上设置Host HTTP标头:
|
|
4)Dynamic Requirements with Condition Expressions 通过条件限制路由匹配
路由匹配,除了可以通过"路由占位符"、"HTTP方法"或"主机名"外,如果需要更灵活地定义任意匹配逻辑,还可以使用conditions
路由选项。如下所示:
注释形式
// src/Controller/DefaultController.php
namespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;class DefaultController extends AbstractController
{/*** @Route(* "/contact",* name="contact",* condition="context.getMethod() in ['GET', 'HEAD'] and request.headers.get('User-Agent') matches '/firefox/i'"* )** expressions can also include config parameters* condition: "request.headers.get('User-Agent') matches '%app.allowed_browsers%'"*/public function contact(){// ...}
}
YAML文件
# config/routes.yaml
contact:path: /contactcontroller: 'App\Controller\DefaultController::contact'condition: "context.getMethod() in ['GET', 'HEAD'] and request.headers.get('User-Agent') matches '/firefox/i'"# expressions can also include config parameters# condition: "request.headers.get('User-Agent') matches '%app.allowed_browsers%'"
XML文件
<!-- config/routes.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/routinghttp://symfony.com/schema/routing/routing-1.0.xsd"><route id="contact" path="/contact" controller="App\Controller\DefaultController::contact"><condition>context.getMethod() in ['GET', 'HEAD'] and request.headers.get('User-Agent') matches '/firefox/i'</condition><!-- expressions can also include config parameters --><!-- <condition>request.headers.get('User-Agent') matches '%app.allowed_browsers%'</condition> --></route>
</routes>
PHP文件
// config/routes.php
namespace Symfony\Component\Routing\Loader\Configurator;use App\Controller\DefaultController;return function (RoutingConfigurator $routes) {$routes->add('contact', '')->controller([DefaultController::class, 'contact'])->condition('context.getMethod() in ["GET", "HEAD"] and request.headers.get("User-Agent") matches "/firefox/i"')// expressions can also include config parameters// 'request.headers.get("User-Agent") matches "%app.allowed_browsers%"';
};
这个condition是一个表达式,您可以在此处了解有关其语法的更多信息:表达式语法(https://symfony.com/doc/current/components/expression_language/syntax.html)。此处的匹配逻辑是,HTTP方法是GET或HEAD,并且请求的User-Agent
报头中含有firefox字样
。
您可以通过利用传递到表达式中的两个变量,来执行表达式中所需的任何复杂逻辑:
context
一个实例RequestContext
,其中包含有关匹配路由的最基本信息。
request
Symfony Request
对象(请参阅请求)。
symfony配置文件之三:routing和路由配置相关推荐
- Spring Cloud Gateway源码系列之路由配置加载过程
当前章节主要是讲解配置文件中定义的路由配置被gateway加载,同时转为可以直接操作的路由对象 引入pom坐标 <dependency><groupId>org.springf ...
- Symfony路由配置教程【已在腾讯课堂开课】
Symfony路由配置教程[已在腾讯课堂开课] Symfony路由配置教程,主要讲解Symfony框架的路由配置.对于此不了解的学生,可以看下. 01 Symfony框架路由请求流程 [录播]Symf ...
- Angular 路由(routing)基本配置
本节我们学习路由知识点,假如我们有三个自定义组件,分别是[首页|home],[设置|set]和[更多|more],需要动态挂载在根组件[app.component.html]中,当浏览器url地址输入 ...
- Cisco路由配置命令
交换机命令总结 交换机口令设置: switch>enable 进入特权模式 switch#config terminal 进入全局配置模式 switch(config) ...
- Zuul微服务网关、容错与监控、Zuul路由端点、路由配置、Zuul上传文件、Zuul过滤器、Zuul异常处理、Zuul回退、Zuul聚合微服务
一.为什么要使用微服务网关 二.Zuul 1.编写Zuul微服务网关 2.Zuul的Hystrix容错与监控 3.Zuul的路由端点 4.路由配置 1.自定义指定微服务的访问路径 2.忽略指定微服务 ...
- Ubuntu 18.04 LTS 永久路由配置指导
一.方式一: Netplan 已在在 Ubuntu 18.04 系统中用来管理网络,它是一款是一个用于配置 Linux 网络的简单工具. 通过 Netplan ,只需用一个 YAML 文件就可描述每个 ...
- 路由器与静态路由配置命令(基础)
目录 一.路由器的工作原理 二.路由器的基本配置 1.路由器配置模式 2.基本设置命令 3.接口IP地址配置 4.静态路由配置 三.路由器操作说明 1.登陆到路由器进入特权模式 2.指令基础 3.sh ...
- 华为路由器静态路由配置
1.ensp环境 关注注册不成功的问题:在没有放置设备的情况下注册,如果注册不成功可以查看C:\Users\Administrator中是否有.virtualbox,有则删除: 关于出现多个###的问 ...
- eigrp配置实验_思科CCIE认证技术详解IPv6协议下的静态路由配置
无论是 NAT,还是 CIDR 等都是缓解 IP 地址短缺的手段,而 IPv6 才是解决地址短缺的最终方法.IPv6 是由 IETF 设计的下一代互联网协议,目的是取代现有的互联网协议 IPv4. I ...
最新文章
- 用XCA(X Certificate and key management)可视化程序管理SSL 证书(3)--创建自己定义的凭证管理中心(Certificate Authority)...
- 第四周项目二-太乐了
- linux shell 文件比较 diff 简介
- 线程类中如何调用service_你真的了解Java多线程吗?
- 数据库系统概论:第七章 数据库设计
- 以人为本的机器学习:谷歌人工智能产品设计概述 By 机器之心2017年7月17日 12:13 取代了手动编程,机器学习(ML)是一种帮助计算机发现数据中的模式和关系的科学。对于创建个人的和动态的经历
- 复制类中的属性值到另一个类的相同属性中
- Github标星66.6k+:常见数据结构与算法的Python实现
- java银行管理系统_java实现银行管理系统
- java下包内继承时编译不过解决方案
- C#中的DBNull、Null、和String.Empty解释【转】
- hdu--1231--并查集连分量的个数
- (需求实战_03)_shell脚本 sftp协议下载文件
- [English] notes
- 程序员风光背后:从零到BAT数据分析师靠的是什么?
- Windows10部署Kubenetes详细步骤
- NYOJ--458 小光棍数
- 【广工考试笔记】计算机系统结构考试速成笔记
- xmind zen 用法
- php网站 视频马赛克,如何给视频加马赛克 菜鸟也能学会的视频加马赛克解决方案...
热门文章
- openssl 1.0.2k-fips 升级到 openssl-3.0.5
- 思科网院 Routing and Switching Essentials ( 版本 6.00) - RSE 6.0 第 1 章考试答案
- UGUI 图集打包工具Sprite Packer
- ucore lab1 任务六
- Java实现增删改查系统代码(全~纯干货)
- 第一篇博客-Sql排名函数DENSE_RANK
- xcode中ineligible devices的注意事项
- php网站整合ck播放器,网页视频播放器-ckplayer 整合到wordpress
- Excel报表的导出
- scala学习之旅(十三):隐式转换和隐式参数