2

現在、フレームワークの機能を理解していない問題に遭遇しています。ViewHelperどのサイトにいるかに応じて出力を返すを設定したいと思います。特定のroutesまたはchild_routesの 2 つに一致する場合、そのルートに応じて ViewHelper がリンクのリストを出力するようにします。一致したルートにない場合は、何も出力したくありません。

ViewHelper の設定は非常に簡単です。現在、ViewHelper は次のようになっています。

'factories' => array(
    'myViewHelper' => function($sm) {
        $service = $sm->getServiceLocator()->get('some-doctrine-entity');
        return new \Mynamespace\View\Helper\ViewHelper($service);
    }
)

出力は、同様のリンクのリストです。

$this->url('someLink', array('id', $service->getId());

今私の問題は、someLinkパーツを可変にする必要があることです。fooまたはのいずれかである必要がありますbarfooと は like と i の両方をbar持つことができchild_routesfoo/index, foo/details, foo/etcそれらすべてに一致する必要があります。

だから私の質問はこれをどのように書くかです

$currentRoute = somehowGetTheCurrentRoute();
if ($currentRoute matching `foo` or `foo/child_routes`
  or is matching `bar` or `bar/child_routes`) {
    echo "im happy";
}
4

2 に答える 2

3

ビューヘルパーでメソッドを定義できます。メソッドは、サービスマネージャーにアクセスできることを前提としています。以下は、問題の解決策を達成する方法です。

//$sm is the service manager

$router=$sm->get('Router');
$request=$sm->get('Request');
$routeMatch=$router->match($request);

//get an array of the route params and their values
$routeparams=$routeMatch->getParams();

//get the matched route name
$routename=$routeMatch->getMatchedRouteName();

//The previous parameters can be injected directly into the url plugin call
//$this->url($routename,$routeparams)

//the full path can also be obtained from the router
//(you can test it within a controller)
$path=$router->assemble($routeparams,$options);
于 2012-12-27T14:07:58.283 に答える
1

新しい一致のない別のソリューション

$serviceLocator->get('Application')->getMvcEvent()->getRouteMatch();

于 2013-01-11T09:15:16.263 に答える