2016-03-20 2 views
0

Я делаю свои первые шаги с Symfony. У меня есть файл DefaultController.php с 2 одинаковых функций:Symfony 3 magic

/** 
    * @Route("/test/", name="test") 
    */ 
    public function indexActionTest(Request $request) 
    { 
     return new Response('<html><body>Lucky number: it works!</body></html>'); 
    } 

    /** 
    * @Route("/test2/", name="test2") 
    */ 
    public function indexActionTest2(Request $request) 
    { 
     return new Response('<html><body>Lucky number: it works here as well!</body></html>'); 
    } 

Забавная вещь в том, что первый из них работает, а второй один не http://triod.ru/project/web/test/ http://triod.ru/project/web/test2/ Даже если консоль говорит о том, что Маршрутные совпадения! Как это возможно?

+0

Попробуйте удалить пустую строку перед 'indexActionTest2', поэтому док-блок непосредственно перед методом. –

+0

К сожалению, это не помогает (: –

+0

Ну, я сделал тест, и он отлично работает. Это должно быть что-то еще. Являются ли эти методы в одном контроллере? Какова ваша маршрутизация confriguratino для этих маршрутов? –

ответ

0

Ваших методы общественного контроллер должны всегда заканчиваются в действии

[method]Action(Request $request){} 

Так test2 вы должны назвать это нравится:

public function test2Action(Request $request) 

Кроме того, вам не нужно, чтобы добавить имя, если вы не переопределение другого маршрута:

/** 
    * @Route("/test/") 
    */ 
    public function testAction(Request $request) 
    { 
     return new Response('<html><body>Lucky number: it works!</body></html>'); 
    } 


    /** 
    * @Route("/test2/") 
    */ 

    public function test2Action(Request $request) 
    { 
     return new Response('<html><body>Lucky number: it works here as well!</body></html>'); 
    } 
+1

Не правда вообще. ;-) Вам не нужно называть его таким образом, когда вы используете аннотации. Я просто это сделал в своем тестовом проекте. Именование маршрутов полезно, если вы хотите сделать «путь (« тест ») в Twig, перенаправить контроллер и так далее. Имя маршрута - это обработчик, который может использоваться во многих случаях. –

+0

Я не сказал, что должен, я сказал, должен, его лучшая практика - это то, что я имел в виду. И если вы используете маршрутизацию YML, symfony будет искать функцию контроллера с именем [имя метода] Action, если у вас был ActionTest в этом сценарии, это не сработало. Также для тестирования путь может быть более удобным, но опять же не обязательным, вы получаете автоматически сгенерированный маршрут com_bundle_controller_action. – jfxninja

+0

«Если», но он не использует yml-маршрутизацию ;-) В любом случае эти методы не имеют никакого отношения к проблеме здесь. Так что ваш человек не связан с проблемой вообще. –