Как перенаправить 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

2

Решение

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

application/config/routes.php

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

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

Другие решения

Это может быть достигнуто путем переопределения 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/

3

Атемответ (с использованием конфигурации маршрута) проще и чище, но указывает на использование _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 не существует.

3
По вопросам рекламы [email protected]