ZF2 - How to change the error/404 response page? N

2019-04-09 03:20发布

By default the page is set like this in the Application module.config array:

'template_map' => array(
    'error/404' => __DIR__ . '/../view/error/404.phtml'

I want to change the page. I want new ViewModel for it full of variables. It means that simply to change the template is not enough:

'error/404' => __DIR__ . '/../view/error/my_new_404_template.phtml'

But I can't understand how to make it. I can't see the way the request comes to the 'error/404'.

  • How to create new ViewModel for it?

  • How to attach variables to it?

  • How the route comes to 'error/404' to catch it to change?

For example, I have such a method for 'error/404' page:

public function pageNotFoundAction() {

    $view = new ViewModel();

    $view->setTemplate('error/404');     // set my template

    $sm = $this->getServiceLocator()->get('SessionManager');
    $cont = new Container('SomeNamespace', $sm);

    $view->var1 = $cont->offsetGet('someValue1');   // the "error/404" template
    $view->var2 = $cont->offsetGet('someValue2');   //       is full of variables
    $view->var3 = $cont->offsetGet('someValue3');
    $view->var4 = "One more view variable";

    // And now I return it somewhere and want it to be called
    //    in case of "the page is not found"
    return $view;
}

How to make such a change? I can't get the system they've created to deal with things like 'error/404'. Please help.

UPD 1

Even more complicated task. How to have several 'error/404' pages? Would like to ask guys who created the framework whether they know that 'not_found_template' cannot have an array of 'error/404' pages. How it can be? If I set this option like this:

'template_map' => array(
    'error/404' => __DIR__ . '/../view/error/404.phtml',
    'my-page/one_more_error404' => __DIR__ . '/../view/my-page/my-page/one_more_error404.phtml',
    'other_page/second_404' => __DIR__ . '/../view/other-page/one_more_error404.phtml',

'not_found_template' => array(
    'error/404',
    'my-page/one_more_error404',
    'other-page/second_404',
);

it throws an error. 'not_found_template' force you to have only one 'error/404' template?

7条回答
爱情/是我丢掉的垃圾
2楼-- · 2019-04-09 04:21

The First thing is to create the views :

modules/Yourapplication/view/yourapplication/error/index.phtml

modules/Yourapplication/view/yourapplication/error/404.phtml

The second thing is to register the views in the module config:

In module.config.php of your application

'view_manager' => array(
        //[...]
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
        //[...]
        'error/404'   => __DIR__ . '/../view/yourapplication/error/404.phtml',
        'error/index' => __DIR__ . '/../view/yourapplication/error/index.phtml',
        ),
   // [...]
    ),
查看更多
登录 后发表回答