在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