У меня есть 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 не существует.