cakePHP将URL作为参数传递
我有一个带有函数admin\u getcontents的ImportControllercakePHP将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
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