我有这条路线,没关系:
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):
我该怎么办?
答案 0 :(得分:1)
我正在使用相同的路线。但它只适用于之前的路线:
$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路由上你会看到你的/:slug下面的路由(URI模板)/:controller和/:controller /:action / *。所有其他路线必须高于/:slug。
如上所述,订单很重要。如果您的正则表达式模式错误,有时会显示缺失控制器,在slug模式上我使用“[a-z0-9] +(?: - [a-z0-9] +)*”。
答案 1 :(得分:0)
不幸的是这种模式([^ /] +)对我不好,但没关系:
$routes->connect( '/:customPageSlug',
[ 'controller' => 'Pages', 'action' => 'display' ],
[
'_name' => 'custom-page'
] )->setPatterns( [ 'customPageSlug' => '([\w\/.])*' ] )
->setPass( [ 'customPageSlug' ] );