Маршруты не работают PHP-MVC

152
30 января 2020, 08:50

Друзья у меня несколько вопросов по этой теме. Сайт должен работать на нескольких языков (Английском , Русском и на Польском) .Для этого я создал контроллеры с классами En , Rus , Pol.

Кантроллер для Английского En

class En
{
   public function index()
   {
      include("view/index.php);
      return true;
   }
    public function about()
   {
      include("view/about.php);
      return true;
   }
    public function templates()
   {
      include("view/template.php);
      return true;
   }
    public function contact()
   {
      include("view/contact.php);
      return true;
   }
}

Таким образом устроены классы Rus и Pol.

Для обработки каждого контроллера я создал класс Router

class Router
{
    private $routes = array(
       "en" => "en/index",
       "en/home" => "en/index",
       "en/home/subscribe" => "en/subscribe",
       "en/about" => "en/about",
       "en/template" => "en/template",
       "en/contact"  => "en/contact",
       "rus" => "rus/index",
       "rus/home" => "rus/index",
       "rus/home/subscribe" => "rus/subscribe",
       "rus/about" => "rus/about",
       "rus/template" => "rus/template",
       "rus/contact"  => "rus/contact",
       "pol" => "pol/index",
       "pol/home" => "pol/index",
       "pol/home/subscribe" => "pol/subscribe",
       "pol/about" => "pol/about",
       "pol/template" => "pol/template",
       "pol/contact"  => "pol/contact"

    );
    private $url;
    function __construct()
    {
        return $this->routes;
    }
    public function addRoutes()
    {
        if (!empty($_GET["url"])) 
        {
            $this->url = trim($_GET["url"], "/");
            foreach ($this->routes as $key => $value) 
            {
                if (preg_match("~$key~", $this->url)) 
                {
                    $segment = explode("/", $value);
                    $controllerName = ucfirst(array_shift($segment));
                    $actionName = array_shift($segment);

                    $controllrFile = "controller/" . $controllerName . ".php";
                    if (file_exists($controllrFile)) 
                    {
                        include_once($controllrFile);
                    }
                    $object = new $controllerName;
                    $object->$actionName();
                }
            }
        }
    }
}

С помощью массива $routes передаются имя контроллера и метод.

Первый вопрос. Работает только первый маршрут для каждого контроллера.Как можно исправить.

Второй вопрос. Как можно сдеалть чтоб главной странице первым подключался "англиский конроллер "

Заранее Спасибо

READ ALSO
Оптимизировать функцию

Оптимизировать функцию

Выполняю код

145
Безопасная загрузка WORD файла. Теория. PHP

Безопасная загрузка WORD файла. Теория. PHP

мой вопрос теоретическийВеб-приложение будет работать только с Word файлами (буду делать в учебных для меня целях СЭД) и загрузить-то с проверкой...

125
Отправка писем через PHPMailer и AJAX

Отправка писем через PHPMailer и AJAX

Всем привет! Не получается сделать отправку писем на сайте через AJAXНажимаю на кнопку отправить и ничего не происходит

128
Преобразовать объект в массив PHP

Преобразовать объект в массив PHP

Хотел бы поинтересоваться, как преобразовать объект, получаемый от АПИ ТелеграммаНиже моя попытка:

163