Codeigniter Динамически загружать контроллер в зависимости от URL (за пределами rout.php) - PullRequest
1 голос
/ 15 мая 2011

при использовании CodeIgniter обычно нужно указать контроллеры в файле config / rout.php. Это не очень удобно, поэтому я хотел бы иметь возможность делать что-то подобное в контроллере.

  1. получить части URL и проверить, указана ли первая часть в массиве
  2. если это так, загрузить указанный контроллер, если нет, загрузить контроллер по умолчанию.

Он в основном имитирует поведение файла маршрутов, но нет необходимости указывать подстановочные знаки раньше. Я использую базовый контроллер, который я расширяю с каждым контроллером, но я хотел бы, чтобы этот контроллер просто загружал (или включал) необходимый контроллер.

Кто-нибудь знает, как я могу сделать это хорошим способом?

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

// Редактировать

Хорошо, вот мой сценарий.

У меня есть cms, и пользователи могут включить модули (например, галерею). Мне нужно включить все PHP-скрипты галереи без необходимости иметь "галерею" в URL. Я подумал, что это будет работать, если я использую «главный контроллер», который загружает другой контроллер в зависимости от выбранных модулей. Я понимаю, что это может быть не лучшим способом, поэтому, если есть «чистый» способ сделать это, пожалуйста, скажите мне.

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 мая 2011

То, как вы это делаете, неверно. Вы никогда не должны брать на себя функцию маршрутизации, чтобы сделать это. Вам нужно использовать какую-то функциональность модуля, чтобы включить необходимые методы и модели; модуль не требует наличия методов, доступных по маршруту, поэтому в основном это «библиотека» с моделью и представлениями.

Если я правильно помню, есть несколько плагинов, которые обеспечивают это, один был HMVC (Google google).

Идеальной формой будет загрузка модуля по требованию с вашего контроллера, как вы делаете это с основными библиотеками CodeIgniter; Допустим, вы находитесь внутри действия контроллера блога и хотите включить модуль comment, который используется в gallery и images, вы просто включаете модуль и вызываете его методы для получения данных, которые вы можете затем перейдите к виду по мере необходимости; вы даже можете визуализировать партиалы и сохранять их в переменной для передачи на ваш главный контроллер.

Надеюсь, этого достаточно, чтобы вы встали на правильный путь :)

0 голосов
/ 16 мая 2011

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

Если я правильно понимаю, вы можете сделать пару вещей в ваших маршрутах, у которых есть маршрут, который передает все на ваш контроллер по умолчанию.

В вашем контроллере есть массив всех ваших контроллеров, затем вставьте массив в регулярное выражение

$array = [c1, c2, c3, c4];
$str = implode('|', $array);
$regex = "($str)"

теперь просто добавьте свое регулярное выражение в маршрут

теперь перенаправляйте по своему усмотрению.

Но это действительно файл маршрутов для вас, вы просто танцуете вокруг чего-то, что следует использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...