Я начал изучать мир Symfony 2 и сталкивался с некоторыми действительно странными проблемами, я бы не подумал, что они могут произойти в такой профессиональной среде. Я покажу вам проблемы, с которыми я сталкиваюсь один за другим:Как решить некоторые проблемы в symfony 2?
1) Как получить последнее действие? я нашел только это решение, которое IMHO полупрофессиональный:
$request->attributes->get('_controller');
// will get yourBundle\Controller\yourController::CreateAction
$params = explode('::',$request->attributes->get('_controller'));
// $params[1] = 'createAction';
$actionName = substr($params[1],0,-6);
Является ли это серьезно, я должен сделать некоторые экстра-работу, чтобы получить его, почему .. Есть ли лучшее решение? Создание базового класса контроллера с помощью метода, например. getActionName(), но почему я должен реализовать такую базовую функциональность в рамках. Есть ли другой способ?
2) Когда я пересылаю запрос, код в 1) не будет работать.
$request = $this->container->get('request');
$getParameterList = $request->query->all();
if (!empty($getParameterList['mode'])
&& $getParameterList['mode'] == 1) {
return $this->forward('AcmeDemoBundle:Routing:lawyersearch', array(), $getParameterList);
}
Причина, почему он не будет работать в том, что «AcmeDemoBundle: Маршрутизация: lawyersearch» является другой формат, чем когда я пришел прямо из маршрута. Вторая проблема заключается в том, что мне также нужно перенаправить GET-параметры (я думаю, POST тоже). Есть ли способ, которым я не должен заботиться об этом?
3) Как использовать шаблон по умолчанию без использования этой аннотации:
/**
* @Template()
*/
public function indexAction()
{
return array();
}
Я не хочу иметь, прежде всего, мои методы эту аннотацию; Я знаю, что могу поместить его в верхнюю часть определения класса. Есть ли способ достичь этого? Единственное решение, которое я вижу, - это написать BaseController, который определяет по методу из модуля/контроллера/действия шаблон по умолчанию.
4) Я нашел классы, которые используют общедоступные атрибуты, например. Symfony \ Component \ Validator \ Constraints \ Length, например. public $ max;
Как это решить? Очень странно, потому что это не профессионально использовать публичные атрибуты.
Надеюсь, у кого-то есть простые решения для этого. Это было бы крайне неудобно, если бы у Symfony 2 было так странное поведение во многих случаях. 4 странных вещи, через 2 дня с тех пор, как я начал исследовать его. Это дает мне ощущение, что есть гораздо больше, когда я продолжаю.
Пожалуйста, подтвердите, что никакое другое решение от каркаса или решения не существует. Спасибо
Symfony2 - это всего лишь фреймворк, и он не должен предоставлять ВСЕ и КАЖДУЮ функциональность, в которой вы нуждаетесь. Просто сделайте эту функциональность самостоятельно, если вы не можете ее найти. – xurshid29