За последние 24 часа нас посетил 22341 программист и 1148 роботов. Сейчас ищут 589 программистов ...

Загрузка контроллера и метода через названия в переменных

Тема в разделе "PHP для новичков", создана пользователем fedukonelove, 23 окт 2020.

  1. fedukonelove

    fedukonelove Новичок

    С нами с:
    23 окт 2020
    Сообщения:
    11
    Симпатии:
    0
    Добрый день.

    Идея такая. Пользователь, бывший на моём сайте, при заходе на сайт должен открыть тот метод в том контроллере на котором остановился. Это не должен быть переход на другую страницу. Это именно открытие контроллера и открытие в нём метода, для некоторой проверки.

    Имеется автозагрузка

    Файл index.php
    Код (Text):
    1. <?php
    2. require __DIR__ . '/autoload.php';
    3.  
    4. $launch = new lib\Controllers\Index();
    5. $launch->index();
    Файл autoload.php
    Код (Text):
    1.  
    2. <?php
    3.  
    4. spl_autoload_register(function($class) {
    5.  
    6.     $a = explode('\\', $class);
    7.     $last = array_pop($a);
    8.     $fn = $class . '/' . $last . '.php';
    9.     $fn = __DIR__ . '/' . str_replace('\\', '/', $fn);
    10.  
    11.     if (file_exists($fn)) require $fn;
    12. });
    Контроллер располагается по такому пути lib/Controllers/Index/Index.php. Неймспейсы
    namespace lib\Controllers;

    Допустим в файле lib/Controllers/Index/Index.php у меня имеется 2 переменных.

    Код (Text):
    1. $controller = 'Controller2';
    2. $method = 'proverka;
    Мне нужно открыть их примерно в таком виде, если бы это был обычный запрос к методу:

    Код (Text):
    1. $class = new Controller2();
    2. $class->proverka($data);
    И я пытаюсь их открыть таким способом, но как не странно ничего из этого не выходит
    Код (Text):
    1. $controller = 'Controller2';
    2. $method = 'proverka;
    3. $class::$method($updateLog);
    То есть нужно перейти в контроллер Controller2 (путь к нему lib/Controllers/Index/Controller2.php) и метод в нём proverka($data)

    Задача состоит именно в том, что контроллеров и методов множество, а значения крайних запросов хранятся в БД. И это всё должно выводиться через один файл.

    Возможно я требую чего-то невозможного и глупого, т.к. сам сталкиваюсь с такой задачей впервые и это первая и единственная мысль которая приходит ко мне в голову для решения такой задачи..
     
  2. fedukonelove

    fedukonelove Новичок

    С нами с:
    23 окт 2020
    Сообщения:
    11
    Симпатии:
    0
    Должно быть так, подправлю
    Код (Text):
    1. controller = 'Controller2';
    2. $method = 'proverka;
    3. $controller::$method($updateLog); // здесь должен вызвать я метод нужного контроллера
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв