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

Контроллер срабатывает после знака вопрос, как исправить?

Привет. изучаю mvc, по туториалу сделал каркас но возникла проблема. При вызове контроллера Например: localhost/mvcless/news пишет что Not Found

The requested URL /mvcless/news was not found on this server.

А если вызвать вот так localhost/mvcless/?news то все нормально работает

Кто нибудь знает как заставить работать без знака вопроса.
файл index.php в корневом каталоге
<?php

// FRONT COTROLLER

// Общие настройки

ini_set('display_errors', 1);
error_reporting(E_ALL);

// Подключение файлов системы

define('ROOT', dirname(__FILE__));
require_once(ROOT.'/components/Router.php');

// Установка соединения с БД


// Вызов Router

$router = new Router();
$router->run();


<?php

class NewsController {
	public function actionIndex()
		{

		    echo 'hi';
			return true;
		}

		
}

?>

маршруты из конфига
<?php
return array(
	'news' => 'news/index', // actionIndex in NewsController
);


<?php

class Router
{

	private $routes;

	public function __construct()
	{
		$routesPath = ROOT.'/config/routes.php';
		$this->routes = include($routesPath);
	}

// Return type

	private function getURI()
	{
		if (!empty($_SERVER['REQUEST_URI'])) {
		return trim($_SERVER['REQUEST_URI'], '/');
		}
	}

	public function run()
	{
		$uri = $this->getURI();

		foreach ($this->routes as $uriPattern => $path) {

			if(preg_match("~$uriPattern~", $uri)) {

				$segments = explode('/', $path);

				$controllerName = array_shift($segments).'Controller';
				$controllerName = ucfirst($controllerName);


				$actionName = 'action'.ucfirst((array_shift($segments)));

				$controllerFile = ROOT . '/controllers/' .$controllerName. '.php';
				if (file_exists($controllerFile)) {
					include_once($controllerFile);
				}

				$controllerObject = new $controllerName;
				$result = $controllerObject->$actionName();
				if ($result != null) {
					break;
				}
			}

		}
	}
}


7caf630a5de441cab0d944ed0e273655.png

пробывал прописывать в виртуальных хостах рутом саму папку mvcless все равно приходилось писать знак вопроса. в windows, в xampp все работает нормально. как это исправить в lamp?
  • Вопрос задан
  • 391 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
Используй NameSpace тебе однозначно будет проще, а ещё в добавок ужасный код роутера.
Как вариант у тебя может не всё правильно устроено в .htaccess
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/$1 [L,QSA]
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Знакомый роутинг, чувствую туториал с пхп-старта :) Роутинг корявый и недоделанный, если с сервака будешь заходить на сайт с адресом вида 255.255.255.255/test/site, то будут ошибки, поэтому не пугайся :) Допиливать мне его было лень, поэтому с денвера сразу на хостинг залил его.
Вот кстати весь htacces оттуда
AddDefaultCharset utf-8

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php

# Попробуйте эту настройку .htaccess, если у Вас возникли проблемы с отображением
# стилей css
#AddDefaultCharset cp-1251
#ErrorDocument 404 /
#RewriteEngine On
#RewriteCond %{REQUEST_FILENAME} -s [OR]
#RewriteCond %{REQUEST_FILENAME} -l [OR]
#RewriteCond %{REQUEST_FILENAME} -d
#RewriteRule ^.*$ - [L]
#RewriteRule ^.*$ index.php [L]
Ответ написан
profesor08
@profesor08 Куратор тега PHP
The requested URL /mvcless/news was not found on this server.

Вот это должно сразу навести на нужные мысли, и нужные мысли не связаны с php. Вэб-сервер понятия не имеет о вашем php роутинге. Он ищет указанный путь из url. Вы ему укзали папку news, он не нашел эту папку и выдал ошибку. Следовательно, вам надо преобразовать данный путь в тот, который пойдем php скрипт. Как это сделать вам показали выше.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽