2013-08-29 3 views
0

Я пытаюсь настроить определение маршрутизации в моем проекте, что позволит пользователям получать профили, просто используя свое имя пользователя в качестве единственного параметра в URL-адресе, например www.example.com/username, а не www.example.com/user/view/usernameМаршрутизация всех определенных параметров в CakePHP

Я установил весь маршрут, чтобы перейти к действию, которое проверяет, существует ли пользователь в качестве последнего маршрута в файле конфигурации, и он работает, но он управляет всей базовой маршрутизацией, которую делает торт , Это означает, что мне нужно будет определить маршрут для каждого контроллера, к которому я хочу предоставить доступ, чтобы убедиться, что я никогда не попаду в него. Мои маршруты:

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, если контроллер существует, но провалился до последнего маршрута, который в противном случае идет на страницу user/view.

Мой вопрос в том, что я пытаюсь выполнить, правильно ли я делаю это? Если мне нужно определить маршрут для каждого контроллера, к которому я хочу получить доступ, я буду, но я должен подумать, что есть лучший способ выполнить это.

Благодаря

ответ

1

Согласно моему пониманию вашего вопроса, я думаю, вы можете продолжить как это.

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; 
    } 

} 

Надеется, что это поможет вам ..

+0

Вашего решения работало почти так же, как вы написали. Огромное спасибо. – aviemet

+0

добро пожаловать. –

Смежные вопросы