cakephp 3 中的 Slug 路由
Slug route in cakephp 3
我有这条路线,没问题:
Router::connect('/tour/:slug',
['controller' => 'Tours','action' => 'view'],
['slug'=>'[^\/]+','pass'=>['slug']]
);
我想删除“/tour”,但它有缺少控制器错误:
Router::connect('/:slug',
['controller' => 'Tours','action' => 'view'],
['slug'=>'[^\/]+','pass'=>['slug']]
);
错误页面(请求中:http://localhost/nextholiday/a_slug):
我该怎么办?
我正在使用相同的路线。但它只适用于路线之前:
$routes->fallbacks(DashedRoute::class);
示例(在 Router::scope('/'... 内):
$routes->connect(
'/:slug',
['controller' => 'Articles', 'action' => 'view'],
[
'pass' => ['slug'],
'slug' => '[^\/]+' // Taken from your example
]
);
// ...
$routes->fallbacks(DashedRoute::class);
如果一切正常,在 DebugKit Routes 上,您会看到路由(URI 模板)/:controller 和 /:controller/:action/* 就在 /:slug 的下方。所有其他路线必须在 /:slug.
之上
如前所述,顺序很重要。如果您的正则表达式模式错误,有时会显示缺少控制器,在 slug 模式上我使用“[a-z0-9]+(?:-[a-z0-9]+)*”。
不幸的是,这种模式 ([^/]+) 对我不利,但没关系:
$routes->connect( '/:customPageSlug',
[ 'controller' => 'Pages', 'action' => 'display' ],
[
'_name' => 'custom-page'
] )->setPatterns( [ 'customPageSlug' => '([\w\/.])*' ] )
->setPass( [ 'customPageSlug' ] );
我有这条路线,没问题:
Router::connect('/tour/:slug',
['controller' => 'Tours','action' => 'view'],
['slug'=>'[^\/]+','pass'=>['slug']]
);
我想删除“/tour”,但它有缺少控制器错误:
Router::connect('/:slug',
['controller' => 'Tours','action' => 'view'],
['slug'=>'[^\/]+','pass'=>['slug']]
);
错误页面(请求中:http://localhost/nextholiday/a_slug):
我该怎么办?
我正在使用相同的路线。但它只适用于路线之前:
$routes->fallbacks(DashedRoute::class);
示例(在 Router::scope('/'... 内):
$routes->connect(
'/:slug',
['controller' => 'Articles', 'action' => 'view'],
[
'pass' => ['slug'],
'slug' => '[^\/]+' // Taken from your example
]
);
// ...
$routes->fallbacks(DashedRoute::class);
如果一切正常,在 DebugKit Routes 上,您会看到路由(URI 模板)/:controller 和 /:controller/:action/* 就在 /:slug 的下方。所有其他路线必须在 /:slug.
之上如前所述,顺序很重要。如果您的正则表达式模式错误,有时会显示缺少控制器,在 slug 模式上我使用“[a-z0-9]+(?:-[a-z0-9]+)*”。
不幸的是,这种模式 ([^/]+) 对我不利,但没关系:
$routes->connect( '/:customPageSlug',
[ 'controller' => 'Pages', 'action' => 'display' ],
[
'_name' => 'custom-page'
] )->setPatterns( [ 'customPageSlug' => '([\w\/.])*' ] )
->setPass( [ 'customPageSlug' ] );