2014-11-10 1 views
1

У меня есть действие в моем PostController, в котором отображаются все сообщения на главной странице, имеющие slug в качестве аргумента.Слизы, вызывающие конфликты маршрутов

PostController: displayAction

/** 
* @Route("/{postSlug}", defaults={"postSlug"= false}) 
* @Template() 
*/ 
public function displayAction($postSlug) 
{ 
    //Forget about whats inside here 
    return array[]; 
} 

Теперь у меня есть еще один контроллер для пользователей, имеющих действие входа, и для этого я установка/входа в маршрут в аннотацию Маршрут

UserController: loginAction

/** 
* @Route("/login") 
* @Template() 
*/ 
public function loginAction() 
{ 
    //bla bla bla 
    return []; 
} 

Теперь проблема в том, что когда когда я пытаюсь получить доступ к localhost: 8000/login, он показывает мне белую страницу, а контроллер и действие на панели инструментов отладки - PostController: DisplayAction, где должен быть UserController :: loginAction. Причина, по которой я верю, заключается в том, что она вызывает некоторые конфликты с slug, но я могу защитить свою позицию здесь, заявив, что у меня есть другой контроллер «CreatePostController» с аннотацией Route «/ create», которая работает нормально, я не уверен, почему, но она работает ,

Я уверен, что делаю какую-то ошибку, но не знаю, что и если есть конфликт, то как работает CreatePostController?

Маршрутизатор: Debug Скриншот Router:Debug

routing.yml

blogger_blog_homepage: 
resource: "@BloggerBlogBundle/Controller" 
type: annotation 

ответ

2

Проблема с маршрутизацией. Если у вас есть декларация маршрута для/{postSlug} перед/логином, то он будет иметь доступ/{postSlug} до/login, потому что логин также подходит для postSlug. Система не знает, что логин не является postSlug.

Вы можете избежать этого путем посылки/логина входа до/{postSlug} маршрута. Проверьте файл routing.yml.

Поскольку вы используете аннотацию для маршрутизации, вам нужно быть осторожным, потому что Symfony использует некоторые приоритеты.

сломать ваш routing.yml в:

blogger_blog_user: 
resource: "@BloggerBlogBundle/Controller/UserController.php" 
type:  annotation 

blogger_blog_homepage: 
resource: "@BloggerBlogBundle/Controller/PostController.php" 
type:  annotation 

И то же самое для CreatePostController. UserController должен находиться перед другими контроллерами.

+1

Я не использую routing.yml либо как - я просто с помощью аннотаций и, во-вторых, почему CreatePostList: createAction работает? Имейте в виду, что все они находятся в отдельных контроллерах. –

+0

Можете ли вы отправить файл app/config/routing.yml? А также $ php app/console router: debug – repincln

+1

Я обновил сообщение, пожалуйста, посмотрите на screenhop и routing.yml –

1

Вы можете добавить параметр requirmens, например, если у вас postSlug есть только номера:

/** 
* @Route("/{postSlug}", defaults={"postSlug"= false}, requirements={"postSlug"="\d+"}) 
* @Template() 
*/ 
public function displayAction($postSlug) 
{ 
    //Forget about whats inside here 
    return array[]; 
} 

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

  • Нет связанных вопросов^_^