Variables 在zend framework 2中将变量设置为404
在我的控制器中,我在If语句后抛出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 ($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);