Передача нескольких переменных в 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 ответов:
Вы можете использовать
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); } }
Я надеюсь, что это решит вашу проблему.