Хобрук: Ваш путь к мастерству в программировании

Пожалуйста, как я могу динамически установить пространство имен для любого контроллера класса в нескольких папках в PHP MVC Framework

<?php

namespace Application\Core;
use Application\Core\View;


class Router {


    public function __construct() {}
    /**
     method that routes the url
     * @param  [array] $url [contains an array of current url in the browser]
     * @return [object]      [an instance ocontroller being called]
     */
    
    public static function route($url) {
        $controller = (isset($url[0]) && $url[0] !== "") ? ucwords($url[0])."Controller" : "HomeController";
        $controller = "Framework\Controllers\\".$controller;
        array_shift($url);
        $method = (isset($url[0]) && $url[0] !== "") ? $url[0] : "index";
        array_shift($url);
        $arguments = empty($url) ? [] : array_values($url);
        if (self::isValidController($controller) === true) {
            $controller = new $controller;
            if(self::isValidMethod($controller, $method) === true) {
                empty($arguments) ? $controller->{$method}() : call_user_func_array([$controller, $method], $arguments);
            } else {
                http_response_code(404);
                exit(View::render("http", "codes/404", ["title" => "Page Not Found"]));
            }
        }else {
            http_response_code(404);
            exit(View::render("http", "codes/404", ["title" => "Page Not Found"]));
        } 
    }

    private static function isValidController($controller){
        if(!empty($controller)){
            return (preg_match('/\A[a-z]+\z/i', $controller) || class_exists($controller) || strtolower($controller) === "homecontroller") ? true : false;
        }else { 
            return false; 
        }
    }

    private static function isValidMethod($controller, $method){
        if(!empty($method)){
            return (preg_match('/\A[a-z]+\z/i', $method) || method_exists($controller, $method)  || strtolower($method) === "index") ? true : false;
        }else { 
            return false; 
        }
    }

    public static function redirect($location) {
        if (!headers_sent()) {
            header('Location: '.DOMAIN.$location);
        }else {
            echo '<script type="text/javascript">';
            echo 'window.location.href="'.DOMAIN.$location.'";';
            echo '</script>';
            echo '<noscript>';
            echo '<meta http-equiv="refresh" content="0;url='.$location.'" />';
            echo '</noscript>';
            exit;
        }
    }

}

** Это мой класс маршрутизатора, в котором контроллеры имеют пространство имен только для Framework \ Controllers. Но я хочу динамически загружать внутренние папки в папке Controller, например, Backend - пространство имен как Framework \ Controllers \ Backend, и иметь возможность делать это, динамически загружая любой допустимый контроллер класса, найденный в любой из папок внутри Framework \ Controllers. Я использую автозагрузку PSR-4 с композитором. ** Приветствуем любой ответ


  • Отвечает ли это на ваш вопрос? динамические пространства имен PHP 05.10.2020
  • Что-нибудь не работает с данным кодом? Тогда объясните, с какой проблемой вы столкнулись. 05.10.2020
  • Finder Component от Symfony кажется решением. Вы бы применили что-то вроде этого (по умолчанию рекурсивно): $finder->files()->in("<path-to-controllers-folder>")->name("<name-of-controller-file>");. Возможно, вам стоит также принять во внимание FastRoute. 07.10.2020
  • Компонент Symfony Finder подходит для моего решения. Большое тебе спасибо. 07.10.2020
  • Что ж, с кодом проблем нет. Работает нормально. Мне просто нужно было добавить больше каталогов в Framework \ Controllers для лучшей организации. 07.10.2020

Новые материалы

Что такое структура данных?
Структура данных хранит и извлекает данные. Все, что обеспечивает эти две функции, является структурой данных . Период. Вы можете пропустить оставшуюся часть статьи, если ответ..

мои январские чтения по программированию
Эрик Эллиот Программирование приложения JavaScript Эл Свейгарт «Автоматизируйте скучные вещи с помощью Python» Прогрессивное веб-приложение Google..

Создание ассоциаций секвелизации с помощью инструмента командной строки Sequelize
Sequelize - популярный, простой в использовании инструмент объектно-реляционного сопоставления (ORM) JavaScript, который работает с базами данных SQL. Довольно просто начать новый проект с..

Искусственный интеллект в юридической отрасли - пример прогнозирования судебных решений с помощью глубокого обучения
На протяжении всей истории люди полагались на суды, присяжных, королей и королев в отправлении правосудия. Сегодня способность судов обеспечивать справедливое и быстрое правосудие для своих..

Введение в машинное обучение для обнаружения аномалий (часть 1)
Тщательно созданный, тщательно спроектированный ресурс для специалистов по данным. Часть 1 Главы 03 из Руководства по машинному обучению для обнаружения аномалий Внимание! Прежде чем вы..

Начало работы с Pulumi в Digital Ocean
Цифровой океан (ДО) — отличная альтернатива многим другим поставщикам облачных услуг. DO предоставляет простой и понятный пользовательский интерфейс, упрощающий управление инфраструктурой и..

#Day68 из #100days_of_coding
Вчера был мой 68-й день кодинга. я решил один вопрос Проблема: Разбить двоичную строку на подстроки с равным количеством нулей и единиц Дана двоичная строка str длины N . Задача состоит..