cakePHP将URL作为参数传递

时间:2011-12-07 17:49:37

标签: url cakephp-2.0

我有一个带有函数admin_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页面正确加载。所以我想通过一个?在参数之前:

管理员/进口/ getcontents /?HTTP%3A%2F%2Flocalhost%2Feclipse%2Fanarxeio%2Fexport%2Fcontents%2F

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

由于

1 个答案:

答案 0 :(得分:0)

快速解决方法是对您的网址进行三重网址编码:

// javascript
$.get('/admin/import/getcontents/'+ encodeURIComponent(encodeURIComponent(encodeURIComponent($('#urlcheck').val())))  ,function(data) {
  $('#importtable').html(data);
  $('#busy-indicator').fadeOut('high');
});

然后url在你使用它之前在你的php中解码它:

// 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')
  )
);