DBからタグを取得したり、すべての記事の数を取得したりするなど、各アクションで呼び出さなければならないことがいくつかあります。
今では、表示したい各アクションで常に他の関数を起動しています。現在のルートに適合するアクションでそれらを起動せずにいくつかの関数を起動し、それらの関数にいくつかの小枝変数を割り当てる方法はありますか?
2 に答える
2
あなたはそのように行動することができます:
- 特定の「タイプ」のすべてのリクエストを受け入れるグローバルな「偽の」アクションを作成します
- 正しいアクション(またはユーザー
$router
symfony2オブジェクト)にルーティングするアクションディスパッチャーを(サービスとして)定義します。これは、「偽の」アクションにパラメーターとしてルート名を正確に渡す限り、同じことを行います。 - 適切なアクションを呼び出した後、必要なすべてのことを実行します
だから、このようなもの
public function actionDispatcher(Request $request, $route_name, $parameters)
{
/* retrieve the router */
$router = $this->get('router');
$myRouteDefaultsArray = $router->getRouteCollection->get('route_name')->getDefaults();
/* retrieve the correct action */
$myAction = $myRouteDefaultsArray['_controller'];
/*use your action here */
[.....]
/* fire your functions here */
[.....]
/* render the twig template along your variables here */
[.....]
}
}
于 2012-11-16T10:07:36.790 に答える
2
DonCallisto のおかげで、私はこれを作りました:
<?php
namespace Puzzle\InfobusBundle\EventListener;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Bundle\TwigBundle\TwigEngine;
class MyListener{
protected $doctrine;
protected $templating;
protected $session;
protected $container;
/**
* @param ContainerInterface $container
*/
public function __construct($security, $doctrine, $session, $templating, $container){
$this->doctrine=$doctrine;
$this->session=$session;
$this->templating=$templating;
$this->container=$container;
}
public function onKernelRequest() {
$this->container->get('twig')->addGlobal('myVar', 1234);
}
そして app/config/config.yml で:
services:
acme_my.exception.my_listener:
class: Acme\MyBundle\EventListener\MyListener
arguments: ["@security.context", "@doctrine", "@session", "@templating", "@service_container"]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
これで、onKernelRequest のコードが各ページでコードを起動し、いくつかの変数を twig テンプレートに送信できるようになりました。
于 2012-11-16T17:09:41.500 に答える