Хорошо, я могу придумать один способ сделать это, но это, вероятно, будет более болезненным, чем просто написание маршрутов для каждой функции.
Вам нужно расширить Router.php
с помощью application/core/MY_Router.php
и переопределить метод _validate_request()
.Который в основном решает, является ли это действительным маршрутом или нет.
он проверяет, существует ли класс контроллера, затем завершается неудачей, если он не существует.Вам нужно заменить это некоторым кодом, который не предполагает сегмента контроллера, затем просматривает каждый из ваших контроллеров и проверяет, содержит ли он вызванный метод (это будет сегмент 1, так как контроллера нет).
Теперьхитрый момент, в этот момент жизненного цикла CI ваш контроллер, очевидно, не загружен, поэтому вы не можете проверить его, используя method_exists () .
Вам нужно загружать свои контроллеры по одному,и затем для каждого прогона
method_exists($loaded_class, $method_name)
, и если оно истинно, тогда set, затем продолжайте и вызовите:
$this->set_class('the_name_of_the_scanned_class_which_had_the_method');
Тогда CI может продолжать работать как обычно, и он загрузит вашметоды без пользователя никогда не знают, с какого контроллера он загружен.
.. вероятно, не стоит хлопот imho.Гораздо более простым решением было бы просто иметь один контроллер и один маршрут к этому контроллеру.