【问题标题】:Global routing in CakePHPCakePHP 中的全局路由
【发布时间】:2013-08-23 14:23:41
【问题描述】:

是否可以在 CakePHP 中应用全局路由?

例如:

Router::connect('/:controller/:action/:token', 
        array('controller'=>'App'),
        array(
            'pass' => array('token')
            )
    );

这个想法是,如果一个名为 token 的 NAMED 参数被传递到任何由 App Controller 处理的 URL(应该是一切),它会像这样处理它:

/users/login/123abc 其中 123abc 是令牌。

以及我如何通过分页为我的 Notes 控制器完成此操作的示例:

Router::connect('/notes',
        array('controller'=>'notes','action'=>'index', 'page' => 1),
        array(
            'pass' => array('page')
        )
    );

    Router::connect('/notes/page/:page', 
        array('controller' => 'notes', 'action' => 'index'),
        array(
            'pass' => array('page'),
            'page' => '[1-9]+'
            )
    );

这使得 URL 像:

/notes/page:1变成/notes/page/1

问题是我必须为每个动作和控制器执行此操作,并希望将其设为全局,以便适用于所有控制器和动作。因此,我将应用控制器作为路由参数进行了实验。

【问题讨论】:

  • 我们是否应该假设您尝试过,但没有成功?它给你一个错误......等等?

标签: php cakephp


【解决方案1】:

为所有控制器定义路由

您可以在路由定义中将控制器设为变量:

Router::connect('/:controller/page/:page', 
    array('controller' => 'action' => 'index'),
    array(
        'pass' => array('page'),
        'page' => '[1-9]+'
    )
);

这样,每个动作只有一个路由。请注意,此路由不会匹配任何有不同顺序、限制或方向的分页 url - 一般来说,路由和分页是困难/脆弱的。

使用获取参数

编辑后的问题提到了分页参数 - 如果主要或唯一用例是分页,您最好使用get arguments

public $paginate = array(
    'paramType' => 'querystring'
);

current/url
current/url?page=2

由于 get 参数不会干扰路由,因此您可以在路由定义中忘记它们,并且当用户使用分页链接导航时,不会有 url 发生显着变化的风险。未来版本的 cake 可能会删除命名参数,并将 get 参数作为分页的默认值。

【讨论】:

  • 是的,我知道它会起作用。但我想更改 URL,使其不再具有 token: 前缀。如果我为每个控制器执行上述代码,它将按我的意愿工作,但我想知道我是否可以在全球范围内应用它而不必为每个控制器都这样做。
  • 使 URL 变为 /users/delete/123abc 而不是 /users/delete/token:123abc 如果直接应用于方法,上述路由通常会执行此操作,但如果可能,我想在全局范围内执行此操作。
  • 默认情况下它不会这样处理 URL。 Cake 中的命名参数由路由器处理,例如:/page:1。您必须创建自己的路线来定制它以使其看起来不同。我将在我的 OP 中发布一个如何处理分页的示例。我试图让令牌以相同的方式工作,但在全局范围内而不是单独为每个控制器进行。
  • 只是为了确认!我 NOT 试图获取令牌值并使用它,正如您的示例所展示的那样。我只是改变了 URL 的外观,使其不再具有 URL 中的参数键。
猜你喜欢
  • 2013-09-24
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多