參見下面添加自己的觀點strategyr的例子,你可以看到在文檔的例子:
http://framework.zend.com/manual/2.0/en/modules/zend.view.quick-start.html
可以很容易地修改這個例子來檢查一個給定的控制器/行動,如果是這樣的方式你想去。
<?php
namespace Application;
class Module
{
public function onBootstrap($e)
{
// Register a "render" event, at high priority (so it executes prior
// to the view attempting to render)
$app = $e->getApplication();
$app->getEventManager()->attach('render', array($this, 'registerJsonStrategy'), 100);
}
public function registerJsonStrategy($e)
{
$app = $e->getTarget();
$locator = $app->getServiceManager();
$view = $locator->get('Zend\View\View');
$phpStrateogy = $locator->get('PhpRendererStrategy');
// or any you have setup in your config...
$jsonStrategy = $locator->get('ViewJsonStrategy');
$routeMatch = $e->getRouteMatch();
/* @var $routeMatch \Zend\Mvc\Router\RouteMatch */
$routeName = $routeMatch->getMatchedRouteName();
if($routeName == 'myroute') {
// possible change layout?
//$controller->layout('app/layout/new_layout');
// Attach strategy, which is a listener aggregate, at high priority
//$view->getEventManager()->attach($jsonStrategy , 100);
$view->getEventManager()->attach($phpStrateogy, 1);
}
}
}
或者你可以返回一個不同類型的視圖模型的,如果兩個策略啓用你可以改變你的控制器內返回不同的模型中使用的策略:
public function someAction()
{
// will use JsonRenderer
return new \Zend\View\Model\JsonModel(array('bob'));
// Will use PHPRenderer
return new \Zend\View\Model\ViewModel(array('bob'));
}
看像我一樣少[R &D在這個問題之前。就像在普通的非休息路由器中設置一個簡單的動作一樣,Controller中的相應動作也是如此。因此,我的Restful控制器通過主路由器規則執行兩種操作的REST操作,而通過module.config.php中的自定義路由執行非休息操作。所以不需要對Module.php進行任何更改。 –