Как я могу перенаправить ошибку 404 на пользовательскую страницу 404 с помощью Codeigniter? - PullRequest
22 голосов
/ 22 февраля 2010

Добрые господа, Я использую Codeigniter для создания блога. Мне может понадобиться способ перенаправить ошибку 404 на пользовательскую страницу 404. Точно так же, как 404 страницы Abduzeedo.com. Можно ли это контролировать с помощью маршрутов? Или я должен использовать контроллеры, чтобы направить его в другое представление? Большое спасибо!

Ответы [ 9 ]

17 голосов
/ 23 февраля 2010

есть другой способ, которым я пользуюсь: переопределяя базовый класс Exception Codeigniter. Во-первых, убедитесь, что префикс подкласса вашего файла конфигурации (system / application / config / config.php) следующий $config['subclass_prefix'] = 'MY_';

Затем создайте файл с именем MY_Exceptions.php в system / application / library. Затем переопределите функцию show_404 () здесь следующим образом.

class MY_Exceptions extends CI_Exceptions{
    function MY_Exceptions(){
        parent::CI_Exceptions();
    }

    function show_404($page=''){    

        $this->config =& get_config();
        $base_url = $this->config['base_url'];

        $_SESSION['error_message'] = 'Error message';
        header("location: ".$base_url.'error.html');
        exit;
    }
}

Теперь контроллер ошибок будет вашей страницей ошибок, где страница будет перенаправлена ​​для ошибки 404.

8 голосов
/ 16 июня 2014

Пользовательская 404 страница создается с использованием следующих 3 шагов ,

Шаг 1 : Сначала откройте route.php в application / config и установите имя пользовательского контроллера,

$route['404_override'] = 'my404'; //my404 is class name. 

Шаг 2 : Создайте новый контроллер и напишите в нем следующий код. Код очень прост для понимания. Поэтому я не собираюсь объяснять это здесь,

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

    public function index() 
    { 
        $this->output->set_status_header('404'); 
        $data['content'] = 'error_404'; // View name 
        $this->load->view('index',$data);//loading in my template 
    } 
    } 
    ?>

Шаг 3 : Создайте файл представления с именем ' error_404.php ' с вашим собственным сообщением.

2 голосов
/ 15 ноября 2016

Вам не нужно создавать какой-либо контроллер или изменять код, а не изменять один файл представления. Просто поместите 404-страничный HTML-файл в файл application/views/errors/html/error_404.php.

Если вы хотите использовать base_url () или любые другие функции CodeIgniter, инициализируйте класс CI_Controller, как показано ниже:

<?php
  $ci = new CI_Controller();
  $ci =& get_instance();
  $ci->load->helper('url');
?>
2 голосов
/ 08 января 2014

Простое решение.

Создайте пользовательскую ошибку или страницу не найдена в представлении.

Создать контроллер для страницы ошибок. В функции индекса загрузите представление страницы с ошибкой, которую вы уже создали на предыдущем шаге.

Теперь иди к своему application/config/routes.php

вы должны найти $route['404_override'] = '';

Это '' означает, что он вызывает страницу ошибки по умолчанию.

Теперь поместите имя вашего контроллера на страницу ошибки.

Это будет работать.

Предположим, что мой контроллер для страницы с ошибкой 'error'. и страница просмотра 'notfound'.

Итак, код для Error.php контроллера будет:

<?php
class Error extends CI_Controller
{
    function index()
        {
           $this->load->view('notfound'); 
        }

}

Теперь я заменил $route['404_override'] = ''; на $route['404_override'] = 'error'; в application/config/routes.php.

1 голос
/ 15 июля 2016

Очень, очень, очень, очень более простое решение ...
Просто отредактируйте /application/views/error_404.php со своей пользовательской страницей 404:)

1 голос
/ 05 ноября 2014

Ну, вы хотите показать свою пользовательскую страницу 404, когда страница не найдена на вашем веб-сайте, вы просто замените свой пользовательский файл на основной файл, который находится в application/error/error_404.php, просто замените свой файл здесь, и вы можете перейти в другое место, где вы можете следовать другой метод с использованием routes и пользовательский контроллер для вас пользовательский 404 page. Но самый короткий и простой способ - заменить основной файл на пользовательский 404error page файл

1 голос
/ 21 марта 2013

Для простого решения перейдите в файл «error_404.php» в каталог «application / errors /» и поместите этот код в начало файла:

header("Location:".base_url());

Он перенаправит вашу страницу 404 на домашнюю страницу.

0 голосов
/ 22 апреля 2018

Нет необходимости определять любую сложность. Процесс очень прост. Сначала перейдите в файл application-> config-> rout.php и измените его с помощью функции вашего контроллера, где вы просто загружаете заголовок, нижний колонтитул и страницу 404.php.

$route['404_override'] = 'welcome/_404';

Тогда зайдите на страницу вашего контроллера

function _404(){
$this->load->view("header");
$this->load->view("404");
$this->load->view("footer");

}

Тот же вопрос доступен здесь Отображение представления об ошибке 404 в CodeIgniter

0 голосов
/ 27 мая 2015

Сначала откройте route.php в папке application / config и установите имя настраиваемого контроллера.

 $route['404_override'] = 'custom404'; //custom404 is class name. 

Создайте новый контроллер и напишите в нем следующий код. Код очень прост для понимания. Поэтому я не буду здесь это объяснять.

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

public function index() 
{ 
    $this->output->set_status_header('404'); 
    $data['content'] = 'error_404'; // View name 
    $this->load->view('index',$data);//loading in my template 
} 
 } 
 ?> 

Создайте файл представления с именем error_404.php с вашим собственным сообщением. Это все, что вам нужно сделать, и теперь у вас будет собственная страница 404.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...