Intereting Posts
amazon s3 – загрузка изображений вместо отображения в браузере Проверьте, не связаны ли ссылки на php CodeIgniter 3.0.3 ci_session не сохраняет данные сеанса в таблице ci_sesstion ООП-подход в PHP Объект-объект «некоторая сущность» не может быть найден Почему это почтовое сообщение не декодируется правильно? Границы ячеек не печатаются (кроме 1-й страницы), когда таблица охватывает несколько страниц в Firefox Как создать PDO-параметризованный запрос с помощью инструкции LIKE? PHP-скрипт для загрузки файла, не работающего в IE Twig: пример интернационализации (i18n) Dropzone с нормальной формой Получение ошибки: использование неопределенного константы num – предполагаемое значение 'num' Как сравнить подобие изображения с помощью php, независимо от масштаба, вращения? Экран -X не работает («Нет экрана») Как разрешить PHP создавать субдомен автоматически для каждого пользователя?

Как перенаправить URL-адрес куба на пользовательский контроллер в CodeIgniter?

У меня есть PHP CodeIgniter Controller с именем User и есть метод, который получает информацию о пользователе user_detail($username)
Теперь, когда мне нужно показывать данные пользователя, например, для userName mike
Я называю этот URL
http://www.example.com/user/user_detail/mike

Моя цель
Как сделать пользовательские данные доступными по следующим URL-адресам
http://www.example.com/user/mike
или / и
http://www.example.com/mike

Вы должны прочитать эту страницу из официальной документации codeigniter. Он легко охватывает все связанные вещи с маршрутизирующими URL-адресами. Все маршруты должны быть настроены через файл:

 application/config/routes.php 

Это может быть что-то вроде этого:

 $route['user/(:any)'] = "user/user_detail/$1"; 

Это может быть достигнуто путем переопределения класса CI_Controller Но не меняйте исходные файлы ядра, как я уже сказал, переопределив контроллер и CI_Controller в него свою логику.

Справка: https://ellislab.com/codeigniter/user-guide/general/core_classes.html

как создать маршрут Codeigniter, который не переопределяет другие маршруты контроллера?

Возможно, более простым решением было бы маршрутизировать его с помощью apache mod_rewrite в .htaccess

Вот подробное объяснение того, как его достичь: http://www.web-and-development.com/codeigniter-remove-index-php-minimize-url/

Ответ Hatem (используя конфигурацию маршрута) проще и чище, но указание использования функции _remap() может быть полезно в некоторых случаях:

внутри CI_Controller _remap() будет выполняться при каждом вызове контроллера, чтобы решить, какой метод использовать. и там вы можете проверить, существует ли метод, или использовать определенный метод. в твоем случае:

application/controllers/User.php

 class User extends CI_Controller { public function _remap($method, $params = array()) { if (method_exists(__CLASS__, $method)) { $this->$method($params); } else { array_unshift($params, $method); $this->user_detail($params); } } public function user_detail($params) { $username = $params[0]; echo 'username: ' . $username; } public function another_func() { echo "another function body!"; } } 

это приведет к:

http://www.example.com/user/user_detail/john => 'имя пользователя: john' http://www.example.com/user/mike ……….. => 'имя пользователя : mike ' http://www.example.com/user/another_func … =>' другое тело функции! '

но это не сработает с: http://www.example.com/mike , так как контроллер – даже если это контроллер по умолчанию – вообще не вызывается, в этом случае поведение по умолчанию CI – это поиск контроллера называемый mike и если он не найден, это вызовет ошибку 404.

для большего:

Codeigniter userguide 3: Контроллеры: вызовы метода переадресации

Переадресовать метод по умолчанию, если метод CodeIgniter не существует.