ZF2:如何自动捕获视图助手抛出的异常

时间:2013-09-19 09:24:10

标签: zend-framework2 zend-view

我有一些助手在错误时抛出异常。这对开发来说没问题,但是对于生产我想配置PhpRenderer来捕获并记录异常,而不需要制作要渲染的孔视图文件 - 只需返回任何内容。

PhpRenderer的方法有:

public function __call($method, $argv)
{
    if (!isset($this->__pluginCache[$method])) {
        $this->__pluginCache[$method] = $this->plugin($method);
    }
    if (is_callable($this->__pluginCache[$method])) {
        return call_user_func_array($this->__pluginCache[$method], $argv);
    }
    return $this->__pluginCache[$method];
}

覆盖此方法是否足够?

如何将PhpRenderer替换为我自己的?

1 个答案:

答案 0 :(得分:0)

您可以通过编写自己的视图策略来实现。

首先,在配置中注册新策略。

return array(
        'factories' => array(
            'MyStrategy' => 'Application\ViewRenderer\StrategyFactory',
        )
        'view_manager' => array(
               'strategies' => array(
                   'MyStrategy'
                ), 
         ),
);  

然后,创建自己的策略

namespace Application\ViewRenderer;

use Zend\View\Strategy\PhpRendererStrategy;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\ServiceManager\FactoryInterface;

class StrategyFactory implements FactoryInterface
{


    public function createService (ServiceLocatorInterface $serviceLocator)
    {
        $renderer = new Renderer ();

        return new Strategy ($renderer);
    }
}

和渲染器。

namespace Application\ViewRenderer;
use Zend\View\Renderer\PhpRenderer;

class Renderer extends PhpRenderer
{
    public function render($nameOrModel, $values = null) {
            // this is just an example
            // the actual implementation will be very much like in PhpRenderer
        return 'x';
    }
}