2012-02-29 1 views
2

У меня есть следующие два маршрута в моем приложении:Routing не работает при использовании тире в URL

Router::connect('/posts/:id', 
        array('controller' => 'posts', 'action' => 'view'), 
        array('id' => '[A-Za-z0-9\._-]+', 'pass' => array('id'))); 

    Router::connect('/posts/:slug-:id', 
        array('controller' => 'posts', 'action' => 'view'), 
        array(
         'id' => '[A-Za-z0-9\._-]+', 
         'slug' => '[A-Za-z0-9\._-]+', 
         'pass' => array('id', 'slug') 
        )); 

и пример URL будет:

/posts/This_is_the_first_post-1

Однако было бы показать 404, но если я изменю url - до id до /, он будет работать:/Любые идеи в чем проблема? Является ли это регулярное выражение?

Вот мой метод для просмотра:

function view ($id = null, $slug = null) 
    { 
     $post = $this->Post->find('first',array('contain'=>array('User'=>'Profile'),'conditions'=>array('Post.id'=>$id))); 

     if (!$post) 
     { 
      throw new NotFoundException('404'); 
     } 
     else if($post['Post']['status'] == '0') // 0=draft 1=closed 2=open 
     { 
      if($post['Post']['user_id'] == $this->Auth->user('id')) 
      { 
       $this->Session->setFlash('Your post has NOT been published yet'); 
      } 
      else 
      { 
       throw new NotFoundException('404'); 
      } 
     } 

     if (Inflector::slug($post['Post']['title']) != $slug || $slug = null) 
     { 
      $this->redirect(array('id'=>$post['Post']['id'],'slug'=>Inflector::slug($post['Post']['title']))); 
     } 

     $this->set(compact('post')); 
    } 

ответ

2

Это выглядит быть вызвано регулярными выражениями. На первом маршруте вы разрешаете -, поэтому он не может отличить себя от второго маршрута, где :id должен следовать за -.

Router::connect('/posts/:id', 
       array('controller' => 'posts', 'action' => 'view'), 
       array('id' => '[A-Za-z0-9\._]+', 'pass' => array('id'))); 
       //---Removed hyphen-----^^^^^^ 

Router::connect('/posts/:slug-:id', 
       array('controller' => 'posts', 'action' => 'view'), 
       array(
        'id' => '[A-Za-z0-9\._]+', 
       //---Removed hyphen-----^^^^^^ 
        'slug' => '[A-Za-z0-9\._]+', 
       //---Removed hyphen-----^^^^^^ 
        'pass' => array('id', 'slug') 
       )); 
+0

Приветствия для этого :) – Cameron

+0

На самом деле я попытался удалить дефис себя, прежде чем задать вопрос, но он все еще сломал:/сусло отдаленного неправильный или что-то. Приветствует снова. – Cameron

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