Как настроить маршрутизацию? ошибка в маршрутизации

Есть такой код файла Route.php:

<?php

/*
Класс-маршрутизатор для определения запрашиваемой страницы.
> цепляет классы контроллеров и моделей;
> создает экземпляры контролеров страниц и вызывает действия этих контроллеров.
*/
class Route
{

    static function start()
    {
        // контроллер и действие по умолчанию
        $controller_name = 'Main';
        $action_name = 'index';

        $uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
        $routes = explode('/', $uri);

        // получаем имя контроллера
        if ( !empty($routes[1]) )
        {
            $controller_name = $routes[1];
        }

        // получаем имя экшена
        if ( !empty($routes[2]) )
        {
            $action_name = $routes[2];
        }

        // добавляем префиксы
        $model_name = 'Model_'.ucfirst($controller_name);
        $controller_name = 'Controller_'.ucfirst($controller_name);
        $action_name = 'action_'.$action_name;

        /*
        echo "Model: $model_name <br>";
        echo "Controller: $controller_name <br>";
        echo "Action: $action_name <br>";
        */

        // подцепляем файл с классом модели (файла модели может и не быть)

        $model_file = strtolower($model_name).'.php';
        $model_path = "application/models/".$model_file;
        if(file_exists($model_path))
        {
            include "application/models/".$model_file;
        }

        // подцепляем файл с классом контроллера
        $controller_file = strtolower($controller_name).'.php';
        $controller_path = "application/controllers/".$controller_file;
        if(file_exists($controller_path))
        {
            include "application/controllers/".$controller_file;
        }
        else
        {
            /*
            правильно было бы кинуть здесь исключение,
            но для упрощения сразу сделаем редирект на страницу 404
            */
            Route::ErrorPage404();
        }

        // создаем контроллер
        $controller = new $controller_name;
        $action = $action_name;

        if(method_exists($controller, $action))
        {
            // вызываем действие контроллера
            $controller->$action();
        }
        else
        {
            // здесь также разумнее было бы кинуть исключение
            Route::ErrorPage404();
        }

    }

    function ErrorPage404()
    {
        $host = 'http://'.$_SERVER['HTTP_HOST'].'/';
        header('HTTP/1.1 404 Not Found');
        header("Status: 404 Not Found");
        header('Location:'.$host.'404');
    }

}

bootstrap.php

<?php

    // подключаем файлы ядра
    require_once 'core/model.php';
    require_once 'core/view.php';
    require_once 'core/controller.php';
    
    require_once 'core/route.php';
    Route::start(); // запускаем маршрутизатор

.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]

404_view.php

<h1>404</h1>
<p>
<img src="/images/404.png">
</p>

И класс контроллер ошибки:

<?php

class Controller_404 extends Controller
{
    
    function action_index()
    {
        $this->view->generate('404_view.php', 'template_view.php');
    }

}

введите сюда описание изображения

Маршрутизация в отдельном файле Route.php в директорию core. В этом файле класс Route, который будет запускать методы контроллеров, которые в свою очередь будут генерировать вид страниц.

Подскажите в чем проблема? как правильно обработать запрос браузера и настроить маршрутизацию?

У меня по идее должна открываться страница с надписью 404 и картинкой


Ответы (1 шт):

Автор решения: TRIGGERED

Ругается, что нельзя отправить заголовки после вывода. Вывод начался в файле /cms/index.php на первой строчке. Выводом считается echo либо любой символ вне скобок. Так же проверьте кодировку, если у вас кодировка UTF-8 - то она должна быть UTF-8 без BOM.. По этой причине нельзя редактировать файлы в обычном блокноте, так как кодировка может слететь на стандартный UTF-8 с BOM

→ Ссылка