it-swarm.com.ru

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

но я обнаружил, что мой метод может получить первую переменную без проблем, но не второй переменной. Может ли кто-нибудь указать мне в правильном направлении, пожалуйста. Спасибо заранее.

10
TotalNewbie

Вы можете использовать uri для получения значений в вашем URL

Вот пример

public function getproduct()
{
  $productID =  $this->uri->segment(3);
  $factoryID =  $this->uri->segment(4);
  // ProductID will be 25
  // Factory ID will be 45
}

Тогда вы можете просто использовать значения, как вам угодно

20
Chitowns24

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

23
Donovan

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

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

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

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

8
Alex7

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

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

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

public function getproduct($productID, $factoryID){
  .....
}
3
Firze

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

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

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

 $id1 =  $this->uri->segment(3);
 echo $id1; //output is 45
0
Faisal

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

function _remap($method, $args)
{

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

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

0
Usama Khalid