CakePHP默认路由参数


CakePHP default route parameter

我在CakePHP中遇到路由问题。我想把参数传递给路由,但这个参数需要有默认值。我的路线:

$routes->connect('/exchangeOffer/add/:type', ['controller' => 'Offer', 'action' => 'add'], ['pass' => ['type'], 'type' => '(NORMAL|AUTO)']);

当我去其中一个地址时,这条路线很有效:

http://domain/exchangeOffer/add/NORMAL

http://domain/exchangeOffer/add/AUTO

但我希望它能与地址一起工作

http://domain/exchangeOffer/add

然后将默认类型参数传递为NORMAL
我知道这样的东西在Zend Framework中是可行的,但我对CakePHP完全陌生,找不到实现这一点的方法(查看了许多帖子和答案,不仅在这里,而且都没有帮助)。

如果您想在路由级别解决此问题,那么您必须添加一个没有设置:type路由元素的附加路由,以及在默认数组中传递的默认type参数,如

$routes->connect(
    '/exchangeOffer/add/:type',
    [
        'controller' => 'Offer',
        'action' => 'add'
    ],
    [
        'pass' => ['type'],
        'type' => '(NORMAL|AUTO)'
    ]
);
$routes->connect(
    '/exchangeOffer/add',
    [
        'controller' => 'Offer',
        'action' => 'add',
        'type' => 'NORMAL'
    ],
    [
        'pass' => ['type']
    ]
);

如果你想在不定义类型的情况下生成URL(例如通过Router::url()),你必须添加(根据顺序添加)第三条规则,而根本不涉及类型

$routes->connect(
    '/exchangeOffer/add',
    [
        'controller' => 'Offer',
        'action' => 'add'
    ]
);

另请参见

  • 食谱>路线>连接路线

如果您不需要该操作,只需输入Controller,cakefp将选择控制器中的默认操作(它将是索引)示例:

Router::connect(
    '/add/*', array('controller' => 'users','action' => 'index' )
);

你什么时候去http://domain.com/add/some-thing.html或http://domain.com/add,系统将调用控制器USERS并操作INDEX

希望它能帮助你