cakePHP将URL作为参数传递

cakePHP将URL作为参数传递,url,cakephp-2.0,Url,Cakephp 2.0,我有一个带有函数admin\u getcontents的ImportController function admin_getcontents($url = null) { $contents = json_decode(file_get_contents(($url)),true); //some stuff } 通过ajax,我调用/admin/import/getcontents/with: $.get('/admin/import/getcontents/'+ enco

我有一个带有函数admin\u getcontents的ImportController

function admin_getcontents($url = null)
{
    $contents = json_decode(file_get_contents(($url)),true);
    //some stuff
}
通过ajax,我调用/admin/import/getcontents/with:

$.get('/admin/import/getcontents/'+ encodeURIComponent($('#urlcheck').val())  ,function(data) {
      $('#importtable').html(data);
      $('#busy-indicator').fadeOut('high');
});
因此,我调用该页面:/admin/import/getcontents/http%3A%2F%2Flocalhost%2Feclipse%2Fanarxeio%2Fexport%2Fcontents%2F

Apache给了我一个404错误。如果我调用/admin/import/getcontents/1,页面将正确加载。所以我想通过考试?在参数之前,例如:

管理员/导入/获取内容/?http%3A%2F%2Flocalhost%2Feclipse%2Fanarxeio%2Fexport%2Fcontents%2F

现在我没有收到404错误,但是admin_getcontents中的$url参数为空。我怎样才能实现上述目标


谢谢

一个快速解决方案是将您的url编码为三倍:

// javascript
$.get('/admin/import/getcontents/'+ encodeURIComponent(encodeURIComponent(encodeURIComponent($('#urlcheck').val())))  ,function(data) {
  $('#importtable').html(data);
  $('#busy-indicator').fadeOut('high');
});
然后在使用之前在php中对其进行url解码:

// php
function admin_getcontents($url = null)
{
  $url = urldecode(urldecode($url));
  $contents = json_decode(file_get_contents(($url)),true);
  //some stuff
}
编辑以下评论:

您需要设置路由以传递url参数。查看您的设置,它应该类似于:

Router::connect('/admin/import/getcontents/:url', array(
  'controller' => 'import', 
  'action'     => 'getcontents', 
  'admin'      => true), 
  array(
    'url'  => '(.*)', 
    'pass' => array('url')
  )
);

不,这不行。问题在于cakePHP,因为正如我所看到的,$\u请求的数组中有url。但是cakePHP无法识别函数param。哦,对不起,我以为您已经正确设置了路由。我已经测试过了,它确实有效。让我更新我的答案。另外你说你得到了404?如果你得到一个404,你怎么能看到请求对象呢?当我把一个?在/admin/import/getcontents/admin/import/getcontents/?http%3A%2F%2Flocalhost%2Feclipse%2Fanarxeio%2Fexport%2Fcontents%2F之后,在您的示例中,使用ecustom路由如何调用我的函数?使用ajax调用和额外的编码,正如我回答的那样:'/admin/import/getcontents/'+encodeuricomponentencodeuricomponent$'urlcheck'.val