web-dev-qa-db-ja.com

codeigniterを使用してURLで複数の変数を渡す

迷惑をかけて申し訳ありませんが、CIで発生している非常にありふれた問題を誰かが助けてくれることを望んでいました。 CIの例を使用して、URL経由で変数を送信できます。

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

メインコントローラーのgetproduct()メソッド内で、問題なく24に送信された変数を取得できます。

ただし、URLを介して2つの変数を渡すようになりましたが、これを行う方法やCodeIgniterでこれを許可するかどうかはわかりません。 CIで2つの変数を渡す方法と、私が試した変数を取得できるメソッドを誰かに教えてください:

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

そして、私のgetproductメソッド内で:

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

しかし、私のメソッドは問題なく最初の変数を取得できますが、2番目の変数は取得できません。誰かが私を正しい方向に向けることができますか?事前に感謝します。

11
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
}

その後、必要に応じて値を使用できます

22
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ユーザーガイド

25
Donovan

Config/routes.phpでルートを設定して、アイテムを解析する必要があります。

次のようになります。

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

その後、それが機能することを願っています。

9
Alex7

他の誰かがCI3を使用してこれに遭遇した場合。 CodeIgniter 3では、特別なルートは必要ありません。現在CI2でも機能するかどうかはわかりません。

次のようなパラメーターを使用して、これらのURIセグメントにアクセスできます。

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

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

uriを使用して、URLの値を取得できます http:// localhost/project/main/get_product/12/2

ここに例があります

public function get_product(){
  $product_id =  $this->uri->segment(3);  // Product id will be 12
  $factory_id =  $this->uri->segment(4);  // Factory id will be 23

}

その後、必要に応じて値を使用できます

1
Sani Kamal

メソッドにURIセグメントを渡す

URIに3つ以上のセグメントが含まれる場合、それらはパラメーターとしてメソッドに渡されます。

たとえば、次のような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

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