Symfony4.1 Routing 基础
Routing
- 创建路由
# config/routes.yaml
blog_list:
path: /blog
controller: App\Controller\BlogController::list
blog_show:
path: /blog/{slug}
controller: App\Controller\BlogController::show
- 场景路由
# config/routes.yaml
about_us:
path:
nl: /over-ons
en: /about-us
controller: App\Controller\CompanyController::about
# config/routes/annotations.yaml
controllers:
resource: '../../src/Controller/'
type: annotation
prefix: //场景前缀
en: '' # don't prefix URLs for English, the default locale
nl: '/nl'
- 添加{通配符}条件
# config/routes.yaml
blog_list:
path: /blog/{page}
controller: App\Controller\BlogController::list
requirements: //限定条件(必须加,否则等于匹配 /blog/*)
page: '\d+'
# config/routes.yaml
blog_list:
path: /blog/{page<\d+>}
controller: App\Controller\BlogController::list
- 给{占位符}一个默认值
# config/routes.yaml
blog_list:
path: /blog/{page}
controller: App\Controller\BlogController::list
defaults:
page: 1
requirements:
page: '\d+'
# config/routes.yaml
blog_list:
path: /blog/{page<\d+>?1}
controller: App\Controller\BlogController::list
- 高级路由示例
# config/routes.yaml
article_show:
path: /articles/{_locale}/{year}/{slug}.{_format}
controller: App\Controller\ArticleController::show
defaults:
_format: html
requirements:
_locale: en|fr //场景
_format: html|rss //限定
year: \d+
- 生成链接
//继承controller基类方法 generateUrl()
class MainController extends AbstractController
{
public function show($slug)
{
// /blog/my-blog-post
$url = $this->generateUrl(
'blog_show',
array('slug' => 'my-blog-post')
);
}
}
//generateUrl()具体方法
// /blog/my-blog-post
$url = $this->router->generate(
'blog_show',
array('slug' => 'my-blog-post')
);
// /blog/2?category=Symfony
$this->router->generate('blog', array(
'page' => 2,
'category' => 'Symfony',
));
// generates: /over-ons
$this->router->generate('about_us', array(
'_locale' => 'nl',
));
// http://www.example.com/blog/my-blog-post
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
$this->generateUrl('blog_show', array('slug' => 'my-blog-post'), UrlGeneratorInterface::ABSOLUTE_URL);
原文 : Routing