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