2010-12-18 12 views
7

私はかなりcakephpに新しいですが、私はURLとパラメータに関する質問があります。CakePHP、GETパラメータとルーティング

function myaction($arg = null, $arg2 = null) 
{ 
    // do work 
} 

私が気付いて次のように私は私のコントローラ内のアクションにマップするためにそのURLをご希望の

http://www.mysite.com/controller/myaction?arg=value&arg2=val 

:私は、標準のURLなどのように見えるURLを持ってできるようにしたいと思いますcakephpにはhereと記載されているようにルーティングされていますが、正直なところこれは設計されていて、非標準のURL文字列になります。

私の現在の状況では、ケーキについて何も知らずケーキのURLフォーマットをサポートしていない外部(課金)システムによってURLが生成され、呼び出されています。

答えて

11

どのような形式でもURLを使用できます。それはちょうどCakePHPは私が同様の問題を持っているあなたは、変数$this->params['url']

function myaction() 
{ 
    if(isset($this->params['url']['arg'])) 
    $arg = $this->params['url']['arg']; 
    if(isset($this->params['url']['arg2'])) 
    $arg2 = $this->params['url']['arg2']; 
} 
+0

+1のおかげFO rあなたの助けが晴れ! – Introgy

+1

あなたは 'isset'と言うつもりでしたよね? is_setはPHP関数ではありません。 –

0

からGETを通過した変数を取得することができます。私は外部システムを持っているわけではありませんが、私はすべてのパラメータをURLパスに入れるのが好きではないためです。私の例では、いくつかの検索クエリがアセンブルされ、コントローラに渡されています。 IMHOでは、これらのクエリはGETパラメータであり、URLパスの一部ではありません。

GETパラメータを使用する利点の1つは、URLパス経由でパラメータを渡すのとは異なり、指定されたパラメータの順序が重要でないことです。同じ名前の1が与えられた場合、一般的な方法でこの問題を解決するために

は、私は、GET-PARAMの値を持つすべてのメソッドの引数を交換しています:

class MyController extends AppController 
{ 
    function test($var1 = null, $var2 = "content2") 
    { 
     foreach (get_defined_vars() as $key => $value) { 
      if (isset($this->params['url'][$key])) { 
       $getvalue = $this->params['url'][$key]; 
       $$key = $getvalue; 
       CakeLog::write("debug", "Setting:$key to $getvalue"); 
      } 
     } 
     CakeLog::write("debug", print_r(get_defined_vars(), true)); 
    } 
} 

今、私はこれにアクセスすることができますコントローラメソッドと、このようなGET経由でパラメータを渡す:CakePHPの2.xのためのAppControllerで

http://myapp/mycontroller/test?var1=foo&var2=bar 
1

ソリューションを

class AppController extends Controller { 

.... 

/*** 
    * Recupera los Named envias por URL 
    * si es null $key emtraga el array completo de named 
    * 
    * @param String $key 
    * 
    * @return mixed 
    */ 
    protected function getNamed($key=null){ 
     // Is null..? 
     if(is_string($key)==true){ 
      // get key in array 
      return Hash::get($this->request->param('named'), $key); 
     }else{ 
      // all key in array 
      return $this->request->param('named'); 
     } 
    } 
... 
} 
関連する問題