在cakephp 3中的Slug路线

时间:2015-10-03 09:57:57

标签: cakephp url-routing cakephp-3.0

我有这条路线,没关系:

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):  enter image description here

我该怎么办?

2 个答案:

答案 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' ] );