Comment configurer une page d'erreur 404 dans Phalcon
Comment puis-je définir une page d'erreur 404 dans Phalcon à afficher lorsqu'un contrôleur/action n'existe pas?
- Je suis venu à la réponse... mais 🙂
Vous devez vous connecter pour publier un commentaire.
Vous pouvez régler le répartiteur pour le faire pour vous.
Lorsque vous configurez votre application, vous pouvez le faire (
$di
est à votre DI usine):Créer un
ErrorController
et une 404 vue (
/views/404/404.volt
)return $response
, mais avant cela, vous avez besoin de rendre la vueview->start()->render("page", "action")->finish();
, puis$response->setContent(view->getContent());
Vous pouvez utiliser le routage de gérer 404 not found page:
Ref: http://docs.phalconphp.com/en/latest/reference/routing.html#not-found-paths
$router = Phalcon\Mvc\Router(FALSE); // $defaultRoutes = false
La solution proposée par Dimopoulos ne fonctionne pas. Il génère une condition vélo.
La Phalcon composant de Routeur a un comportement par défaut de fournir un routage simple qui attend toujours une URI qui correspond au modèle suivant: /:controller/:action/:params. Ça va causer beaucoup de problèmes parce que Phalcon recherche d'un contrôleur qui n'existe pas lorsque le serveur reçoit une requête pour une URL qui ne correspond à aucune route définie.
Alors, tout d'abord, vous devez désactiver ce comportement. Cela peut être fait en passant
FALSE
pendant le Routeur création de l'instance, comme suit:À ce stade, vous pouvez utiliser la solution proposée par @Nguyễn Trọng Bằng.
Il est important de noter que si vous utilisez un espace de noms de l'expéditeur ne sera pas en mesure de trouver le contrôleur, sauf si vous spécifiez, comme je l'ai fait ci-dessus.
Ce n'est pas seulement la solution la plus simple, mais il est le seul qui fonctionne.
$router->add('/', ['controller => 'index', 'action' => 'index']);
ensuite créer leIndexController
classe avec une méthode appeléeindexAction()
que l'impression de quelque chose. Keep it simple et d'en faire des œuvres, alors vous allez ajouter de la complexité plus tard.Vous pouvez également définir l'en-tête dans un errorController en utilisant
Et avant, dans le contrôleur, où une erreur se passe, vous pouvez transférer à cette erreur-contrôleur.
C'est un moyen rapide et sale(?) et bon, si vous avez du contenu à partir d'une base de données et souhaitez lancer une erreur, si rien n'a été trouvé.