Передача нескольких переменных в URL с помощью codeigniter
Извините за беспокойство, но я надеялся, что кто-нибудь сможет помочь мне с довольно обыденной проблемой, с которой я столкнулся в CI. Я могу отправить переменную по URL-адресу, используя примеры CI, например:
http://localhost/project/main/getproduct/24
В методе getproduct() моего главного контроллера я могу отправить переменную 24 без проблем.
Однако теперь я хочу передать две переменные через URL-адрес, но я понятия не имею, как это сделать или позволит ли мне CodeIgniter это сделать. не мог бы кто-нибудь, пожалуйста, показать мне, как передайте 2 переменные в CI и метод, который может их извлечь, который я пробовал:
http://localhost/project/main/getproduct/24/45
А затем в моем методе getproduct:
public function getproduct($productID, $factoryID){
.....
}
Но я нахожу, что мой метод может получить первую переменную без проблем, но не вторую переменную. Не мог бы кто-нибудь указать мне правильное направление, пожалуйста. Заранее большое спасибо.
7 answers
Вы можете использовать uri
для получения значений в вашем URL-адресе
Вот пример
public function getproduct()
{
$productID = $this->uri->segment(3);
$factoryID = $this->uri->segment(4);
// ProductID will be 25
// Factory ID will be 45
}
Затем вы можете просто использовать значения по своему усмотрению
Принятый ответ будет работать для этой конкретной проблемы, но не будет работать, если URL-адрес когда-либо изменится. Чтобы получить доступ к нескольким переменным в вашем контроллере, просто добавьте их в определение функции.
http://localhost/project/main/getproduct/24/45
class Main extends CI_Controller {
public function getproduct($productID = 0, $factoryID = 0)
{
// ProductID will be 25
// Factory ID will be 45
}
}
Вы должны задать маршрут в config/routes.php для разбора элементов.
Это выглядит так:
$route["getproduct/(:any)/(:num)"]="main/changequestion/$1/$2"
Тогда я надеюсь, что это сработает.
Если кто-то другой столкнется с этим, используя CI3. В CodeIgniter 3 не требуется никакого специального маршрута. Не уверен, что сейчас это работает и на CI2.
Вы можете получить доступ к этим сегментам URI, используя такие параметры:
public function getproduct($productID, $factoryID){
.....
}
Http://example.com/project/main/getproduct/24/45
Чтобы получить '45', вы можете сделать следующее:
$id1 = $this->uri->segment(3);
echo $id1; //output is 45
Передача сегментов URI вашим методам
Если ваш URI содержит более двух сегментов, они будут переданы вашему методу в качестве параметров.
Например, предположим, что у вас есть URI, подобный этому:
example.com/index.php/products/shoes/sandals/123
Вашему методу будут переданы сегменты URI 3 и 4 ("сандалии" и "123"):
<?php
class Products extends CI_Controller {
public function shoes($sandals, $id)
{
echo $sandals;
echo $id;
}
}
Важно!!! Если вы используете функцию маршрутизации URI, сегменты, переданные вашему методу, будут перенаправлены повторно.
См. эту ссылку как Codeigniter Официальный Путеводитель. Официальное руководство Codeigniter.
Решением этой проблемы является использование функции _remap(). Вам просто нужно добавить эту функцию перед функцией index()
function _remap($method, $args)
{
if (method_exists($this, $method))
{
$this->$method($args);
}
else
{
$this->Index($method, $args);
}
}
Я надеюсь, что это решит вашу проблему.