2010-12-18 14 views
7

Soy bastante nuevo en cakephp pero tengo una pregunta relacionada con las URL y los parámetros. Me gustaría ser capaz de tener una URL que se parece a una URL por ejemplo, normal:CakePHP, GET Parámetros y enrutamiento

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

me gustaría que url para asignar a una acción en mi controlador de la siguiente manera:

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

realizo that cakephp tiene el enrutamiento como se describe en here; sin embargo, honestamente, esto parece más ingenioso y da como resultado una cadena de URL que no es estándar.

En mi situación actual, la URL está siendo generada e invocada por un sistema externo (de facturación) que no sabe nada acerca de la torta y no admite el formato url de la torta.

Respuesta

11

Puede tener su URL de cualquier forma. Es sólo CakePHP le permite recuperar la variable pasada a través de la variable GET $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 Gracias FO ¡Tu ayuda es soleada! – Introgy

+1

¿Querías decir 'isset', verdad? is_set no es una función php. –

0

Tengo un problema similar. No porque tenga un sistema externo, sino porque no me gusta poner todos los parámetros en la ruta URL. En mi ejemplo, tengo algunas consultas de búsqueda que se ensamblan y pasan al controlador. En mi humilde opinión, estas consultas deben ser parámetros GET y no parte de la ruta URL.

Una ventaja del uso de los parámetros GET es que el orden de los parámetros dados no es importante, en contraste con pasar los parámetros a través de la ruta URL.

para resolver este problema de una manera genérica, estoy reemplazando todos los argumentos del método con el valor de la GET-param, si uno con el mismo nombre se le da:

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)); 
    } 
} 

Ahora se puede acceder a este método controlador y pasar parámetros a través de GET como esto:

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

solución en AppController para CakePHP 2.x

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'); 
     } 
    } 
... 
}