私は現在、スケルトン アプリに大まかに基づいて小さな MVC アプリケーションを開発することで ZF2 を学習しています。現在、一致したルートに基づいていくつかの固定 HTML 要素を非表示にしようとしています。例として、ログイン フェーズ中にメイン メニューを表示したくありません。
コントローラのアクションからの戻り値としてトグル パラメータを渡すことで簡単に実現できますが、それではうまくいかないので、レイアウトから一致するルートを確認し、それに応じてレイアウトを構成したいと思います。
問題は、テンプレートで一致したルートを取得する方法がわからないことです。これは可能ですか?コントローラにレイアウト ロジックを追加しないようにする他の解決策はありますか?
いくつかの優れたフランケンシュタインの仕事の後、編集して、これに対する解決策を見つけることができました. 私はヘルパーを使用するというアイデアが好きなので、メイン モジュールのブースト機能から Application オブジェクトを渡そうとしました。
$app = $e->getApplication();
$serviceManager = $app->getServiceManager();
....
$serviceManager->get('viewhelpermanager')->setFactory('getRoute', function($sm) use ($app) {
return new Helper\GetRoute($app);
});
およびヘルパー関数:
use Zend\View\Helper\AbstractHelper;
class GetRoute extends AbstractHelper {
private $sm;
public function __construct($app) {
$this->sm = $app->getServiceManager();
}
public function echoRoute() {
$router = $this->sm->get('router');
$request = $this->sm->get('request');
$routeMatch = $router->match($request);
if (!is_null($routeMatch))
echo $routeMatch->getMatchedRouteName();
}
}
おそらく、これを行うためのよりクリーンでZF2っぽい方法があります...