2016-05-12 3 views
0

Я учу себя Symfony. И маршрутизация не имеет никакого смысла.Symfony Routing не имеет смысла

У меня есть класс postController с несколькими действиями. Первоначально генератор crud из командной строки дал мне это;

/** 
* Post controller. 
* 
* @Route("/post") 
*/ 
class PostController extends Controller 
{ 
    /** 
    * Lists all Post entities. 
    * 
    * @Route("/", name="post_index") 
    * @Method("GET") 
    */ 
    public function indexAction() 
    { 
     // 
    } 

    // 
} 

То, что я хочу добиться того, чтобы удалить @Route из самого класса. Таким образом, я хочу, чтобы моя indexAction была главной страницей, и все другие действия в моем классе, чтобы начать с /post. Например, это то, что я хочу;

class PostController extends Controller 
{ 
    /** 
    * Lists all Post entities. 
    * 
    * @Route("/", name="homepage") 
    * @Method("GET") 
    */ 
    public function indexAction() 
    { 
     // 
    } 

    /** 
    * Finds and displays a Post entity. 
    * 
    * @Route("post/{id}", name="post_show") 
    * @Method("GET") 
    */ 
    public function showAction(Post $post) 
    { 
     // 
    } 

    // what I want for the showAction should count for all other Actions as well 
} 

Когда я вношу изменения, я получаю сообщение об ошибке;

Нет маршрута не найдено для «GET/пост /»

Может кто-нибудь, пожалуйста, объясните мне, что я делаю не так и как это исправить. Я не думаю, что это что-то важное, это, наверное, что-то маленькое, чего я просто не вижу. Я хочу, чтобы сделать это indexAction моего основное действия, действие, когда веб-сайт открывается после того, как пользователь вошел в системе. Спасибо

ответ

0

Вашей спецификация маршрута требует {id} параметра, который является обязательным, так что нет "GET /post/" маршрута действительно. Вам нужно сделать одно из следующих действий

  1. Pass id значения и доступа /post/1, например
  2. Удалить {id} из спецификации маршрута, а затем вы можете получить доступ к /post/
  3. значение Pass по умолчанию для id, так что вы можете получить доступ как /post/ и /post/1. Для того, чтобы сделать это ваша спецификация маршрут должен выглядеть @Route("post/{id}", name="post_show", defaults={"id" = 1})
+0

Это был не маршрут, а действие. Я знаю об этом, я просто сделал что-то быстрое, чтобы идея показать вам. Но да, я знаю, это может привести к неясным пониманиям (все равно исправить это в вопросе). Это было больше о 'indexAction()'. По какой-то причине это работает сейчас, я думаю, что забыл попробовать очистить кеш ... –

0

Нет маршрута не найдено "/post/" правильно

, потому что нет ни одного маршрута "/post/" в вашем примере Theres только "/" и "/post/{id}"

так комом я предпочитаю использовать нотацию и префиксы yml, поэтому она не привязана к классу

проверьте вкладки «YAML» в поле DOCS

+0

Я знаю, что нет маршрута ''/post/"', но почему Symfony говорит, что есть один? Но неважно, почему-то это работает сейчас. Я продолжил с чем-то еще и очистил кэш для этого, и позже я вижу, что маршрутизация работает правильно, так что, я думаю, это был кеш, который нужно было очистить. Я думал, что попробовал ... –