У меня есть 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
класс НО не меняйте исходные файлы ядра, как я уже сказал, переопределите контроллер и поместите в него свою логику.
Помогите: 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/
Атемответ (с использованием конфигурации маршрута) проще и чище, но указывает на использование _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 => ‘username: john’
http://www.example.com/user/mike ……….. => ‘username: mike’
http://www.example.com/user/another_func … => ‘другое тело функции!’
но это не будет работать с: http://www.example.com/mike , поскольку контроллер, даже если он является контроллером по умолчанию, вообще не вызывается, в этом случае поведение CI по умолчанию заключается в поиске контроллера с именем mike
и если он не найден, он выдаст ошибку 404.
для большего:
Codeigniter, руководство пользователя 3: Контроллеры: переопределение вызовов методов
Перенаправить на метод по умолчанию, если метод CodeIgniter не существует.