Передача нескольких переменных в 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){
  .....
}

Но я нахожу, что мой метод может получить первую переменную без проблем, но не вторую переменную. Не мог бы кто-нибудь указать мне правильное направление, пожалуйста. Заранее большое спасибо.

Author: TotalNewbie, 2014-03-31

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
}

Затем вы можете просто использовать значения по своему усмотрению

 16
Author: Chitowns24, 2014-03-31 15:51:10

Принятый ответ будет работать для этой конкретной проблемы, но не будет работать, если 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
    }
}

Ссылка: Руководство пользователя CodeIgniter

 22
Author: Donovan, 2016-10-09 19:37:17

Вы должны задать маршрут в config/routes.php для разбора элементов.

Это выглядит так:

   $route["getproduct/(:any)/(:num)"]="main/changequestion/$1/$2"

Тогда я надеюсь, что это сработает.

 7
Author: Alex7, 2014-03-31 15:55:17

Если кто-то другой столкнется с этим, используя CI3. В CodeIgniter 3 не требуется никакого специального маршрута. Не уверен, что сейчас это работает и на CI2.

Вы можете получить доступ к этим сегментам URI, используя такие параметры:

Http://localhost/project/main/getproduct/24/45

public function getproduct($productID, $factoryID){
  .....
}
 3
Author: Firze, 2016-06-01 10:01:19

Http://example.com/project/main/getproduct/24/45

Чтобы получить '45', вы можете сделать следующее:

 $id1 =  $this->uri->segment(3);
 echo $id1; //output is 45
 0
Author: Faisal, 2016-08-03 08:42:43

Передача сегментов 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.

 0
Author: Mohammad Naim Dahee, 2016-12-10 09:12:56

Решением этой проблемы является использование функции _remap(). Вам просто нужно добавить эту функцию перед функцией index()

function _remap($method, $args)
{

       if (method_exists($this, $method))
       {
           $this->$method($args);
       }
       else
       {
            $this->Index($method, $args);
       }
}

Я надеюсь, что это решит вашу проблему.

 0
Author: Usama Khalid, 2018-02-21 18:14:58