CakePHP中的全局路由
是否可以在CakePHP中应用全局路由 例如:CakePHP中的全局路由,php,cakephp,Php,Cakephp,是否可以在CakePHP中应用全局路由 例如: Router::connect('/:controller/:action/:token', array('controller'=>'App'), array( 'pass' => array('token') ) ); 其思想是,如果一个名为token的命名参数被传递到应用程序控制器处理的任何URL(应该是所有内容),它将像以下那样处理它:
Router::connect('/:controller/:action/:token',
array('controller'=>'App'),
array(
'pass' => array('token')
)
);
其思想是,如果一个名为token的命名参数被传递到应用程序控制器处理的任何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
问题是,我必须为每个操作和控制器执行此操作,并希望使其成为全局的,以便适用于所有控制器和操作。因此,我尝试将app controller作为路由参数。为所有控制器定义一个路由
您可以将控制器设置为管线定义中的变量:
Router::connect('/:controller/page/:page',
array('controller' => 'action' => 'index'),
array(
'pass' => array('page'),
'page' => '[1-9]+'
)
);
这样,每个操作只有一条路由。请注意,如果存在不同的顺序、限制或方向,此路由将不匹配任何分页url-一般来说,路由和分页是困难的/脆弱的
使用Get参数
编辑后的问题提到分页参数-如果主要或唯一的用例是分页,最好使用
i、 e
由于get参数不会干扰路由,所以您可以在路由定义中忽略它们,并且当用户使用分页链接导航时,url不会发生显著变化。cake的未来版本可能会删除命名参数,并将get参数作为分页的默认参数。为所有控制器定义路由
您可以将控制器设置为管线定义中的变量:
Router::connect('/:controller/page/:page',
array('controller' => 'action' => 'index'),
array(
'pass' => array('page'),
'page' => '[1-9]+'
)
);
这样,每个操作只有一条路由。请注意,如果存在不同的顺序、限制或方向,此路由将不匹配任何分页url-一般来说,路由和分页是困难的/脆弱的
使用Get参数
编辑后的问题提到分页参数-如果主要或唯一的用例是分页,最好使用
i、 e
由于get参数不会干扰路由,所以您可以在路由定义中忽略它们,并且当用户使用分页链接导航时,url不会发生显著变化。cake的未来版本可能会删除命名参数,并将get参数作为分页的默认参数。我们是否应该假设您尝试过,但没有成功?它给了你一个错误…等等?我们应该假设你尝试了,但它没有工作?它给了你一个错误…等等?是的,我知道它会起作用。但是我想更改URL,使其不再具有
标记:
前缀。如果我为每个控制器编写了上面的代码,它将按照我的意愿工作,但我想知道是否可以在不必为每个控制器编写代码的情况下全局应用它。将URL改为/users/delete/123abc
,而不是/users/delete/token:123abc
,如果直接应用于方法,上述路由通常会这样做,但如果可能的话,我想在全球范围内做。默认情况下,它不会那样处理URL。Cake中的命名参数由路由器处理,如:/page:1
。您必须创建自己的路线,以使其看起来与众不同。我将在我的OP中发布一个如何处理分页的示例。我正试图让令牌以同样的方式工作,但它是全局性的,而不是针对每个控制器。只是为了确认!我并没有试图获取令牌值并使用它,正如您的示例所演示的那样。我只是简单地改变URL的外观,使其不再具有URL中的参数键。是的,我知道它会起作用。但是我想更改URL,使其不再具有标记:
前缀。如果我为每个控制器编写了上面的代码,它将按照我的意愿工作,但我想知道是否可以在不必为每个控制器编写代码的情况下全局应用它。将URL改为/users/delete/123abc
,而不是/users/delete/token:123abc
,如果直接应用于方法,上述路由通常会这样做,但如果可能的话,我想在全球范围内做。默认情况下,它不会那样处理URL。Cake中的命名参数由路由器处理,如:/page:1
。您必须创建自己的路线,以使其看起来与众不同。我将在我的OP中发布一个如何处理分页的示例。我正试图让令牌以同样的方式工作,但它是全局性的,而不是针对每个控制器。只是为了确认!我并没有试图获取令牌值并使用它,正如您的示例所演示的那样。我只是改变URL的外观,使其不再具有URL中的参数键。
current/url
current/url?page=2