如何解决symfony 2中的一些问题


How to solve some problems in symfony 2?

我现在开始探索Symfony 2的世界,并面临一些非常奇怪的问题,我认为它们在这样的专业框架中不会发生。我将一一向您展示我面临的问题:

1)如何获取最近的动作名称?我只找到了这个恕我直言半专业的解决方案:

 $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:Routing:lawyersearch"是一种与我直接从路线上来时的另一种格式。这里的第二个问题是我还必须转发 GET 参数(我认为也是 POST)。有没有办法我不必关心它?

3) 如何在不使用此注释的情况下使用默认模板:

/**
 * @Template()
 */
public function indexAction()
{
  return array();
}

我不想在我的所有方法之上都有这个注释;我知道我可以把它放在类定义的顶部。有没有办法实现这一目标?我看到的唯一解决方案是编写一个 BaseController,它通过模块/控制器/操作中的方法确定默认模板。

4)我发现了使用公共属性的类,例如Symfony''Component''Validator''Constraint''Length,例如公共$max;

如何解决这个问题?很奇怪,因为这使用公共属性并不专业。

我希望有人对此有简单的解决方案。如果Symfony 2在这么多情况下有这么多奇怪的行为,那将是真的令人失望。4 奇怪的事情我 2 天开始探索它。它让我觉得当我继续时还有更多。

请确认框架没有其他解决方案或哪个是解决方案。谢谢

1)通过访问请求的'_controller'参数,你正在深入研究Symfony2的内部结构。 他们很少在路由之外记录与此相关的任何内容。 您应该更明确地使用控制器操作,不要尝试在此级别上自动化太多。

2)Symfony2不能解释高度动态的控制器。 您知道可以在同一控制器操作中多次调用->forward。 这造成了一个嵌套的噩梦,而Symfony开发人员没有准备好应对。

这是现在弃用$request = $this->container->get('request');以支持$stack = $this->container->get('request_stack');的原因之一。因为转发需要创建新的内部请求。

3) 也已弃用。 Symfony2最佳实践现在不鼓励使用带有空参数的@Template(),因为操作/模板的开发可能会不稳定。 您应该明确定义要使用的模板(如果您使用的话)。 这在处理仅数据响应时会派上用场。 您不希望您的响应自动使用模板,因为这会导致您的设计中出现意外行为。

1) 使用常量:__FUNCTION__http://php.net/manual/en/language.constants.predefined.php

2) 在$request上尝试设置方法: $this->get('request')->setMethod('POST');

3)我不知道,可能不可能。

4)Symfony'Component'Validator'Constraints'Length是约束之一:http://symfony.com/doc/current/book/validation.html#constraints