【发布时间】:2014-11-27 16:23:25
【问题描述】:
我现在开始探索 Symfony 2 的世界,并遇到了一些非常奇怪的问题,我认为它们不会出现在如此专业的框架中。我将一一向您展示我面临的问题:
1) 如何获取最近的actionName? 我只找到了这个半专业的解决方案:
$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\Constraints\Length 与例如公共 $max;
如何解决这个问题?很奇怪,因为这样使用公共属性不专业。
我希望有人对此有简单的解决方案。如果 Symfony 2 在这么多情况下有这么多奇怪的行为,那真是令人失望。自从我开始探索 2 天以来,我遇到了 4 件奇怪的事情。它让我觉得当我继续时还有更多。
请确认框架没有其他解决方案或解决方案。谢谢你
【问题讨论】:
-
Symfony2 只是一个框架,它不应该提供你需要的所有功能。如果找不到,请自行制作该功能。
标签: php symfony frameworks