@haa

Как сделать пагинацию на MVC?

Добрый день! Начал изучать простенькую MVC систему https://habrahabr.ru/post/150267/. Вывод записей работает, вроде сделал. Но проблема в следующем. Когда перехожу по страницам выдает ошибку 404 что такой страницы нет. Как я понял он не находит указанный контроллер, страницу и перекидывает на страницу 404.
d10cb849d228421e9e5518101b5dcc9b.png
Код route.php который перенаправляет на 404
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;

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

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

		// подцепляем файл с классом контроллера
		$controller_file = strtolower($controller_name).'.php';
		$controller_path = "app/controllers/".$controller_file;
		if(file_exists($controller_path))
		{
			include "app/controllers/".$controller_file;
		}
		else
		{
			/*
			правильно было бы кинуть здесь исключение,
			но для упрощения сразу сделаем редирект на страницу 404
			*/
			//include "app/controllers/".$controller_file;
			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');
    }
}
  • Вопрос задан
  • 336 просмотров
Решения вопроса 1
Пробежав глазами по коду, кажется что у вас в роутинге просто не принимается дополнительный параметр в виде номера страницы.
// получаем имя контроллера
    if ( !empty($routes[1]) )
    {	
      $controller_name = $routes[1];
    }
    
    // получаем имя экшена
    if ( !empty($routes[2]) )
    {
      $action_name = $routes[2];
    }

Вы получаете контроллер и экшен, но не принимаете параметр для экшна.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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