Есть класс Route, который динамически создает объекты класса Controller, исходя из адресной строки (тот самый MVC-шаблон из habr'a).
В общем, понадобилось мне использовать namespace'ы в своем приложении. Но, встал вопрос, как динамически создавать объекты в классе Route?
Класс Route:
<?php
use core\controllers as cc;
class Route
{
static function start()
{
//контроллер и действие по умолчанию
$controller_name = 'Main';
$action_name = 'index';
//разбиваем uri на страницы
$routes = explode('/', $_SERVER['REQUEST_URI']);
//получаем имя контроллера, начинаем с первого, т.к. 0й элемент - dns-адрес хоста
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 = "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 ($controller_name == "Controller_Product") {
if ($action != 'Action_index') {
$action = "Action_product";
}
}
if (method_exists($controller, $action)) {
//вызываем действие контроллера
$controller->$action();
} else {
// здесь также разумнее было бы кинуть исключение
Route::ErrorPage404();
}
if ($controller_name == "Admin") {
$controller->$action();
}
}
static function ErrorPage404()
{
$host = 'http://' . $_SERVER['HTTP_HOST'] . '/';
header('HTTP/1.1 404 Not Found');
header("Status: 404 Not Found");
header('Location:' . $host . '404');
}
}
Нужно решение, как создать объекты в этом коде, используя namespace?
Пробовал добавлять alias namespace'a к $controller = new $controller_name;
, но, ясное дело это не увенчалось успехом.
И ничего, к сожалению, не приходит в голову.
В строке, содержащую имя класса, необходимо указать полное имя класса вместе с пространством имён. Директивы use
при этом тоже не используются.
$controller_class_name = 'core\\controllers\\' . $controller_name;
$controller = new $controller_class_name;
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как можно добавить в меню первым шести li определеный класс используя wp_nav_menu html:
Всем здравствуйте! Необходимо вытащить знак доллара вначале строки, но строка содержится в массиве, полученного путём граббинга с сайтаКак...