Задать вопрос
Hy_ok
@Hy_ok

Почему сервер не обрабатывает GET параметры на патерне MVC?

В общем ситуация такая, решил начать изучать mvc, на хабе есть статья про паттерн mvc, вот она
но вот только проблема в том что не получается передать параемтр get в ссылке, меня просто перекидывает на страницу 404, подскажите как быть? как исправить это сие деяние?
а вот и код самого роутера
<?php

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

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

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

		// добавляем префиксы
		$model_name = 'Model_'.$controller_name;
		$controller_name = 'Controller_'.$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');
    }
    
}

я в php новенький, помогите пожалуйста кто нибудь, только опишите подробно как это исправить, и желательно с примерами
  • Вопрос задан
  • 215 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Hy_ok
@Hy_ok Автор вопроса
исправил, нужно заменить это
$routes = explode('/', $_SERVER['REQUEST_URI']);
на это
$uri = $_SERVER['REQUEST_URI'];
        $position = strpos($uri, '?');
        if ($position !== false) {
            $uri = mb_substr($uri, 0, $position);
        }
        $routes = explode('/', $uri);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы