solucion personalizado personalizadas paginas not htaccess found error configurar php http-status-code-404 phalcon volt

php - personalizado - Cómo configurar una página 404 en Phalcon



paginas de error personalizadas xampp (4)

La solución propuesta por Dimopoulos no funciona. Genera una condición de ciclismo.

El componente Phalcon Router tiene un comportamiento predeterminado que proporciona un enrutamiento muy simple que siempre espera un URI que coincida con el siguiente patrón: /: controller /: action /: params. Esto causará muchos problemas porque Phalcon buscará un controlador que no existe cuando el servidor recibe una solicitud de una URL que no coincide con ninguna ruta definida.

Por lo tanto, en primer lugar, debe deshabilitar este comportamiento. Esto se puede hacer pasando FALSE durante la creación de la instancia de Router, de la siguiente manera:

$router = Phalcon/Mvc/Router(FALSE);

En este punto, puede utilizar la solución propuesta por @ Nguyễn Trọng Bằng.

$router->notFound( [ "namespace" => "MyNamespace/Controller" "controller" => "index", "action" => "route404" ] );

Es importante tener en cuenta que, si está utilizando un espacio de nombres, el despachador no podrá encontrar el controlador, a menos que lo especifique, como lo hice anteriormente.

Esta no es solo la solución más fácil, sino la única que funciona.

¿Cómo puedo configurar una página 404 en Phalcon para que se muestre cuando no existe un controlador / acción?


Puede configurar el despachador para que lo haga por usted.

Cuando inicia su aplicación, puede hacer esto ( $di es su fábrica DI):

use /Phalcon/Mvc/Dispatcher as PhDispatcher; $di->set( ''dispatcher'', function() use ($di) { $evManager = $di->getShared(''eventsManager''); $evManager->attach( "dispatch:beforeException", function($event, $dispatcher, $exception) { switch ($exception->getCode()) { case PhDispatcher::EXCEPTION_HANDLER_NOT_FOUND: case PhDispatcher::EXCEPTION_ACTION_NOT_FOUND: $dispatcher->forward( array( ''controller'' => ''error'', ''action'' => ''show404'', ) ); return false; } } ); $dispatcher = new PhDispatcher(); $dispatcher->setEventsManager($evManager); return $dispatcher; }, true );

Crear un ErrorController

<?php /** * ErrorController */ class ErrorController extends /Phalcon/Mvc/Controller { public function show404Action() { $this->response->setStatusCode(404, ''Not Found''); $this->view->pick(''404/404''); } }

y una vista 404 ( /views/404/404.volt )

<div align="center" id="fourohfour"> <div class="sub-content"> <strong>ERROR 404</strong> <br /> <br /> You have tried to access a page which does not exist or has been moved. <br /> <br /> Please click the links at the top navigation bar to navigate to other parts of the site, or if you wish to contact us, there is information in the About page. <br /> <br /> [ERROR] </div> </div>



También puede establecer el encabezado en un errorController utilizando

class ErrorController extends ControllerBase { public function error404Action() { $this->response->setHeader(''HTTP/1.0 404'',''Not Found''); // $this->response->setHeader(404, ''Not Found''); <- did not work } }

Y antes, en el controlador, donde ocurre un error, puede reenviarlo a este controlador de error.

class IndexController extends ControllerBase { public function indexAction() { $id = (int)$this->getId($param); if ($id > 0) { // do you stuff } else { $this->dispatcher->forward(array( ''controller'' => ''error'', ''action'' => ''error404'') ); } } }

Esa es una forma rápida y sucia (?) Y es buena, si obtiene contenido de una base de datos y desea lanzar un error, si no se encuentra nada.