Mon problème concerne les pages d'erreur personnalisées après la mise à niveau vers Codeigniter 3.0.

J'avais un contrôleur Errors qui gérait la page d'erreur 404 du site Web - sur ce contrôleur, j'ai personnalisé certaines parties de la page, par exemple si l'utilisateur est connecté, il montrait le nom d'utilisateur sur la barre de navigation, etc. (oui, sur la page d'erreur 404) .

Après la mise à niveau vers CI 3.0, j'ai remarqué que les pages d'erreur sont gérées dans un dossier différent, j'ai commencé à migrer de cette manière; mais le problème est que je ne peux pas charger de variables sur cette page, comme les variables de session ou que je ne peux même pas utiliser les fonctions de CI sur ces pages.

Je pense que ces pages sont censées être uniquement des pages HTML, mais existe-t-il un moyen de charger des variables sur ces pages d'erreur?

6
user2066448 27 déc. 2015 à 09:53

4 réponses

Meilleure réponse

Vous devez définir dans application/config/routes.php l'itinéraire suivant

$route['404_override'] = 'my404';

Ensuite, vous devez créer un nouveau contrôleur dans votre répertoire de contrôleurs (application/controllers/)

<?php 
class My404 extends CI_Controller 
{
 public function __construct() 
 {
    parent::__construct(); 
 } 

 public function index() 
 { 
    $this->output->set_status_header('404'); 
    $this->load->view('err404');//loading in custom error view
 } 
} 

Et créez une vue err404. C'est tout!

Reportez-vous à: Routes réservées

18
Mr. ED 27 déc. 2015 à 22:47

Cela ne fonctionne pas dans codeigniter 3, j'ai écrasé la vue par défaut (application/views/errors/html/error_404.php) et ajouté ma vue personnalisée, maintenant show_404() fonctionne bien.

2
Telmo Marques 18 mai 2018 à 08:52

Cela fonctionne bien, mais si vous redirigez vers une erreur, par exemple 404 avec la fonction show_404, votre contrôleur ne chargera pas votre vue, pour un vrai 404 dans la méthode show_404, vous devez aller au cœur de codeigniter et le toucher.

\ system \ core \ Common.php

Voici un exemple de code:

function show_404(){
  $ci = get_instance();
  $ci->output->set_status_header(404);
  $ci->load->view('errors/error404_view');
  echo $ci->output->get_output();
  exit(4);
}
1
Javier Gordo 6 sept. 2017 à 18:18

Dans Codeigniter 3, au lieu d'appeler show_404(), je viens de rediriger vers la fonction de contrôleur d'erreur personnalisée.

Par exemple. pour le scénario ci-dessus

if (404 condition...) {
    redirect("my404");
}
0
Adam O'Dwyer 23 avril 2020 à 10:49