Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 在zend framework 2中将变量设置为404_Variables_View_Controller_Zend Framework2_Http Status Code 404 - Fatal编程技术网

Variables 在zend framework 2中将变量设置为404

Variables 在zend framework 2中将变量设置为404,variables,view,controller,zend-framework2,http-status-code-404,Variables,View,Controller,Zend Framework2,Http Status Code 404,在我的控制器中,我在If语句后抛出404响应,类似于: if ($foo) { $this->getResponse()->setStatusCode(404); return; } $this->getResponse()->setVariables(array('foo' => 'bar', 'baz' => 'bop')); $this->getResponse()->set

在我的控制器中,我在If语句后抛出404响应,类似于:

    if ($foo) {
        $this->getResponse()->setStatusCode(404);
        return; 
    }
    $this->getResponse()->setVariables(array('foo' => 'bar', 'baz' => 'bop'));
    $this->getResponse()->setStatusCode(404);
    return; 
然后,我想把一些变量发送到我的404页面。在我看来,我想这样做:

    if ($foo) {
        $this->getResponse()->setStatusCode(404);
        return; 
    }
    $this->getResponse()->setVariables(array('foo' => 'bar', 'baz' => 'bop'));
    $this->getResponse()->setStatusCode(404);
    return; 
这不是一个好的解决方案,那么我该怎么做呢

之后,如何在我的404视图中获取这些变量

谢谢你

哦,上帝

我太傻了

解决方案:

if ($foo) {
    $this->getResponse()->setStatusCode(404);
    return array('myvar' => 'test');
}
在404.phtml中:

<?php echo $this->myvar; ?>

我是从谷歌那里得到这个问题的,我的问题有点难。由于404错误可能会从绝对不可预测的url抛出,所以您无法确定是否在某个控制器中捕捉到它。控制器–捕捉404错误为时已晚

在我的例子中,解决方案是捕获一个
事件\u分派\u错误
,并完全重建
视图模型
。Cavern就是那个布局–是根
viewModel
,默认情况下附加到布局中的内容是另一个
viewModel
(子项)。这些观点在官方文件中描述得并不清楚

下面是它在
模块.php中的外观:

public function onBootstrap(MvcEvent $event)
{
    $app = $event->getParam( 'application' );
    $eventManager = $app->getEventManager();


    /** attach Front layout for 404 errors */
    $eventManager->attach( MvcEvent::EVENT_DISPATCH_ERROR, function( MvcEvent $event ){

        /** here you can retrieve anything from your serviceManager */
        $serviceManager = $event->getApplication()->getServiceManager();
        $someVar = $serviceManager->get( 'Some\Factory' )->getSomeValue();

        /** here you redefine layout used to publish an error */
        $layout = $serviceManager->get( 'viewManager' )->getViewModel();
        $layout->setTemplate( 'layout/start' );

        /** here you redefine template used to the error exactly and pass custom variable into ViewModel */
        $viewModel = $event->getResult();
        $viewModel->setVariables( array( 'someVar' => $someVar ) )
                  ->setTemplate( 'error/404' );
    });
}

对于zf1,它是$this->getResponse()->setHttpResponseCode(404);