CakePHP默认路由参数

时间:2016-03-25 09:35:56

标签: php cakephp routes

我在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中是全新的,并且无法找到一种方法来做到这一点(通过许多帖子和答案,不仅在这里,而且没有他们帮了。)

2 个答案:

答案 0 :(得分:1)

如果要在路由级别解决此问题,那么您必须添加一个没有: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'
    ]
);

另见

答案 1 :(得分:0)

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

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

当你去http://domain.com/add/some-thing.htmlhttp://domain.com/add时,系统会调用控制器USERS和action INDEX

希望对你有帮助