CakePHP,获取参数和路由

CakePHP,获取参数和路由,cakephp,url-routing,Cakephp,Url Routing,我对cakephp相当陌生,但我有一个关于URL和参数的问题。我希望能够有一个看起来像标准url的url,例如: http://www.mysite.com/controller/myaction?arg=value&arg2=val 我希望该url映射到控制器中的操作,如下所示: function myaction($arg = null, $arg2 = null) { // do work } 我意识到cakephp具有如上所述的路由,但是,老实说,这似乎设计过度,导致u

我对cakephp相当陌生,但我有一个关于URL和参数的问题。我希望能够有一个看起来像标准url的url,例如:

http://www.mysite.com/controller/myaction?arg=value&arg2=val
我希望该url映射到控制器中的操作,如下所示:

function myaction($arg = null, $arg2 = null)
{
   // do work
}
我意识到cakephp具有如上所述的路由,但是,老实说,这似乎设计过度,导致url字符串不标准


在我目前的情况下,url是由外部(计费)系统生成和调用的,该系统对cake一无所知,不支持cake url格式。

您可以使用任何形式的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'];
}

我也有类似的问题。不是因为我有一个外部系统,而是因为我不喜欢把所有参数都放到URL路径中。在我的示例中,我有一些搜索查询,它们被组装并传递给控制器。当然,这些查询应该是GET参数,而不是URL路径的一部分

使用GET参数的一个优点是,与通过URL路径传递参数相比,给定参数的顺序并不重要

为了以一种通用的方式解决这个问题,我将用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传递参数,如下所示:

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

CakePHP 2.x的AppController解决方案

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

你的意思是说“isset”,对吗?is_set不是一个php函数。