在CakePHP中路由除某些参数外的所有参数
我正试图在我的项目中设置一个路由定义,允许用户通过简单地使用用户名作为url中的唯一参数来访问配置文件,比如在CakePHP中路由除某些参数外的所有参数,cakephp,routing,routes,Cakephp,Routing,Routes,我正试图在我的项目中设置一个路由定义,允许用户通过简单地使用用户名作为url中的唯一参数来访问配置文件,比如www.example.com/username,而不是www.example.com/user/view/username 我已经设置了一个全包路由,以转到一个检查用户是否存在的操作,这是配置文件中的最后一个路由,它可以工作,但它超越了cake所做的所有基本路由。这意味着我必须为每个我想提供访问权限的控制器定义一条路由,以确保我永远不会到达catchall。我的路线: Router::c
www.example.com/username
,而不是www.example.com/user/view/username
我已经设置了一个全包路由,以转到一个检查用户是否存在的操作,这是配置文件中的最后一个路由,它可以工作,但它超越了cake所做的所有基本路由。这意味着我必须为每个我想提供访问权限的控制器定义一条路由,以确保我永远不会到达catchall。我的路线:
Router::connect('/events/edit/*', array('controller' => 'events', 'action' => 'edit'));
Router::connect('/events/view/*', array('controller' => 'events', 'action' => 'view'));
Router::connect('/events/add', array('controller' => 'events', 'action' => 'add'));
Router::connect('/events/*', array('controller' => 'events', 'action' => 'index'));
Router::connect('/*', array('controller' => 'users', 'action' => 'view'));
因此,这将允许我访问我的事件页面,但任何其他页面都会被发送到第二个路由器
我想要的是一个路由,如果控制器存在,它执行/controller/action/param
的基本蛋糕功能,但如果控制器不存在,它将进入到用户/视图
页面的最后一个路由
我的问题是,对于我试图实现的目标,我这样做是否正确?如果我需要为我想要访问的每个控制器定义一个路由,我会的,但我必须认为有更好的方法来实现这一点
谢谢根据我对你问题的理解,我想你可以这样做
App::uses('UserRoute','Lib');
Router::connect('/:user_name', array('controller' => 'users', 'action' => 'view'),
array('routeClass'=>'UserRoute', 'pass' => array('user_name')));
在你的app/lib
中创建一个文件UserRoute.php
,如下所示
<?php
App::uses('Lib', 'CakeRoute');
class UserRoute extends CakeRoute {
function parse($url) {
$params = parent::parse($url);
if (empty($params)) {
return false;
}
App::import('Model', 'User');
$User = new User();
$user_count = $User->find('count',array(
'conditions' => array('User.username' => $params['user_name']),
'recursive' => -1
));
if ($user_count) {
return $params;
}
return false;
}
}
您的解决方案几乎完全按照您编写的方式工作。非常感谢你。