CakePHP,获取参数和路由
我对cakephp相当陌生,但我有一个关于URL和参数的问题。我希望能够有一个看起来像标准url的url,例如: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
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函数。