在SF3中,我想知道如何执行一些逻辑,这些逻辑对我网站中的任何页面都是通用的。从任何树枝模板访问的公共逻辑
FOSUserBundle, global arguments/function before templating是一个开始的答案,但它谈到了SF2,我不确定OP是否真的期待与我一样的事情。
目前,我定义了一个自定义基类(BasePageController
),任何控制器从中继承我的项目。 公共逻辑写在那里,每个控制器调用一个通用的方法来检索一些自定义变量发送到树枝模板。
这里是如何看(我试图使最小的例子越好):
我的基本控制器类:
<?php
// src/AppBundle/Controller/BasePageController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class BasePageController extends Controller
{
public function getCommonParams()
{
// This assignement may be replaced by a complex logic,
// evolving user-specific data, session variables... :
$val = 1234;
return [ 'important_val' => $val ];
}
}
从我的基类继承的控制器,例如:
<?php
// src/AppBundle/Controller/HomeController.php
namespace AppBundle\Controller;
use AppBundle\Controller\BasePageController;
class HomeController extends BasePageController
{
public function homeAction()
{
$params = $this->getCommonParams();
return $this->render('home.html.twig', $params);
}
}
基础基本模板:
{# app/Resources/views/base.html.twig #}
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>SO example</title>
</head>
<body>
{% block body %}{% endblock %}
</body>
</html>
我的控制器示例中使用的模板:
{# app/Resources/views/home.html.twig #}
{% extends 'base.html.twig' %}
{% block body %}
<h1>Welcome</h1>
<p>
Important value : {{ important_val }}
</P>
{% endblock %}
我真的不知道,如果它处理的SF网站共同逻辑的常用方式(建议,欢迎它)。
但可以肯定的是,当我尝试在此方案上使用FOSUserBundle
时,问题开始出现。
事实上,FOSUserBundle
中的每个控制器显然不会继承自我自定义的 控制器类。因此,即使重新定义了FOSUserBundle模板,我的公共逻辑 也无法从登录/注册/ ...页面访问。
唯一的解决方法种的我现在能想象有:
- 包括与
{% render %}
整个控制器(从我的自定义类继承)在模板中,其中 共同的逻辑将是可访问的;但 主模板(即login.html.twig
......内)仍然不可用通用逻辑; - 重新定义所有FOSUserBundle控制器,通过我自己的自定义控制器类替换它们的标准继承(
Controller
) ;但我确定这是一年中最糟糕的主意(我想 会减少作曲家升级系统提供的所有灵活性)。{# app/Resources/views/base.html.twig #} {% import_my_variables_from('AppBundle:BasePageController:getCommonParams()') %} <!doctype html> <html> ....
那么怎么可能做出一些常用的逻辑:
,如果有一个神奇的树枝标签,将导入变量 从PHP方法,这样的事情有可能是一个完美的解决方案即使是像FOSUserBundle这样的外部软件包也可以访问?
真正有用的答案,tx;我相信你对常用参数的需要(或不需要)是正确的;但我真的需要清楚地回答这个问题,深入了解我对SF的理解。我用'神奇'这个词来帮助读者看到我是一个初学者,所以他们给我简单的信息,就像你的! tx再次 – yolenoyer