【问题标题】:CakePHP default route parameterCakePHP 默认路由参数
【发布时间】:2016-03-25 09:35:56
【问题描述】:

我在 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 框架中是可能的,但是我在 CakePHP 中是全新的,并且找不到这样做的方法(查看了许多帖子和答案,不仅在这里,但它们都没有帮助)。

【问题讨论】:

    标签: php cakephp routes


    【解决方案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'
        ]
    );
    

    另见

    【讨论】:

      【解决方案2】:

      如果不需要action,直接输入Controller,cakephp会选择controller中的默认action(就是index) 示例:

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

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

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-12
        • 1970-01-01
        • 2016-08-21
        • 1970-01-01
        • 2014-09-18
        • 2012-09-12
        • 2019-02-06
        • 2012-04-12
        相关资源
        最近更新 更多