我一直在尝试通过允许 /slug 访问页面和用户模型/控制器来修改客户网站。我已经阅读了所有 CakePHP 2 Routing 书籍,但是它没有详细介绍如何完成这样的事情。我试过这个:
应用程序/配置/routes.php
App::uses('SlugRoute', 'Lib/Routing/Route');
Router::connect('/:slug', ['controller' => 'pages', 'action' => 'display'], ['routeClass' => 'SlugRoute', 'model' => 'Page']);
Router::connect('/:username', ['controller' => 'users', 'action' => 'view'], ['routeClass' => 'SlugRoute', 'model' => 'User']);
app/Lib/Routing/Route/SlugRoute.php
App::uses('Page', 'Model');
App::uses('User', 'Model');
App::uses('CakeRoute', 'Routing/Route');
App::uses('ClassRegistry', 'Utility');
class SlugRoute extends CakeRoute {
public function parse($url) {
$params = parent::parse($url);
if (empty($params)) {
return false;
}
$model = $this->options['model'];
$this->{$model} = ClassRegistry::init($model);
$result = $this->{$model}->find('first', [
'conditions' => [
$model.'.slug' => $params['slug'],
],
'fields' => array($model.'.id'),
'recursive' => -1,
]);
if ($result) {
$params['pass'] = array($result[$model]['id']);
print_r($params);
return $params;
}
return false;
}
}
遗憾的是,这适用于页面,但不适用于用户。我考虑过修改返回的参数并设置控制器/模型、视图等。但我不认为这是执行此操作的正确方法。有什么建议或解决方案吗?