传递数组从视图到控制器的CakePHP
这是我的视图的一部分(即上的按钮点击执行的JavaScript方法):传递数组从视图到控制器的CakePHP
function assign()
{
var links_list1 = [];
var links1 = document.getElementById('moderatorUsers').getElementsByTagName('a');
for(var a in links1) {
if(typeof links1[a] == undefined) continue;
links_list1.push(links1[a].innerHTML);} var str1 =links_list1.toString();
var moderators = str1.split(',');
var links_list2 = [];
var links2 = document.getElementById('editorUsers').getElementsByTagName('a');
for(var a in links2) {
if(typeof links2[a] == undefined) continue;
links_list2.push(links2[a].innerHTML);} var str2 =links_list2.toString();
var editors = str2.split(',');
var links_list3 = [];
var links3 = document.getElementById('jEditorUsers').getElementsByTagName('a');
for(var a in links3) {
if(typeof links3[a] == undefined) continue;
links_list3.push(links3[a].innerHTML);} var str3 =links_list3.toString();
var jEditors = str3.split(',');
}
这里是控制器方法我需要
function insertPos($moderators,$editors,$jEditors){
$account = new Account();
$account->insertPos($moderators,$editors,$jEditors);
}
我需要知道如何执行控制方法insertPos使用3 AR($版主,编辑$,$ jEditors):使用3个数组从JavaScript的(主持人,编辑,jEditors)来调用在JavaScript方法射线...
我用它来发送阵列中的JavaScript像你告诉我:
,并在控制器中我尝试访问我的数组是这样的:
public function insertPos() {
if (!empty($this->request->data)){
print_r($this->request->data);
$moderators = $this->request->data['moderators'];
$editors = $this->request->data['editors'];
$jEditors = $this->request->data['jEditors'];
$account = new Account();
$account->assignPos($moderators,$editors,$jEditors);
}
}
if(!empty($this->request->data))
里面的部分永远不会执行,这意味着数组没有被发送到控制器....问题在哪里?
谢谢....
它看起来像你想直接访问控制器类。这不是CakePHP的工作方式。你必须经过调度过程。请阅读:http://book.cakephp.org/2.0/en/getting-started/a-typical-cakephp-request.html
这就是说,你将张贴到CakePHP的URL的方式正是如此:
// POST to the AccountsController's insertPos method
$.post('/accounts/insertPos');
来传递数据,如jQuery的规定,与“数据”为前缀通过它在data
选项,如data[moderators]
,所以它结束于Cake的数据变量。
$.post('/accounts/insertPos', {
data: {
'data[moderators]': moderators,
'data[editors]': editors,
'data[jEditors]': jEditors
}
});
的数据现在在蛋糕最终在$this->request->data
。
看着你insertPost()
方法,但是,你将它们简单地作为参数,所以不是你会写你的Ajax像这样
// POST is unnecessary here, since you aren't POSTing data
$.get('/accounts/insertPos/'+moderators+'/'+editors+'/'+jEditors);
你可能需要stringify
你的JavaScript数组和使用json_decode
你inserPos
将它们转换为PHP对象的方法,因为您不能将数组从JavaScript传递到PHP。
我想使用后出于安全原因.... 我想这3个数组传递给控制器2天,但没有什么工作,我是新在此请谁能帮助我.. 我需要发送从视图控制器使用POST和我这3点的阵列,也想知道如何控制访问这些阵列.... – 2012-04-23 23:05:38
@karimgoda我给你介绍如何使用POST指令......我添加了一个例子,使它更清楚。你的Cake方法目前并没有使用它,你需要重新使用'$ this-> request-> data;'来代替。 – jeremyharris 2012-04-24 00:37:57
我修改了帖子,请看看... – 2012-04-24 11:29:23
不要在数据参数中使用数组表示法;只要使用钥匙这样的:
$.post('/accounts/insertPos', {
data: {
'moderators': moderators,
'editors': editors,
'jEditors': jEditors
}
});
,并在您的控制器访问它$this->request->data[key]
不$this->request->data->data[key]
用以下内容替换您的分配功能:
var moderators, editors, jEditors;
function assign()
{
var links_list1 = [];
var links1 = document.getElementById('moderatorUsers').getElementsByTagName('a');
for(var a in links1) {
if(typeof links1[a] == undefined) continue;
links_list1.push(links1[a].innerHTML);} var str1 =links_list1.toString();
moderators = str1.split(',');
var links_list2 = [];
var links2 = document.getElementById('editorUsers').getElementsByTagName('a');
for(var a in links2) {
if(typeof links2[a] == undefined) continue;
links_list2.push(links2[a].innerHTML);} var str2 =links_list2.toString();
editors = str2.split(',');
var links_list3 = [];
var links3 = document.getElementById('jEditorUsers').getElementsByTagName('a');
for(var a in links3) {
if(typeof links3[a] == undefined) continue;
links_list3.push(links3[a].innerHTML);} var str3 =links_list3.toString();
jEditors = str3.split(',');
}
好运
我已经修改后,并没有像你说的,但它不工作,你可以请大家在新的一看,并告诉我什么是错 – 2012-04-24 12:28:31
在视图中删除的方括号只是使用普通的键名,然后再试一次.. – 2012-04-24 12:40:20
而在控制器键名应引用像这样$ this-> request-> data ['moderators'] ... – 2012-04-24 12:41:48
你到目前为止发现和尝试了什么? – Dave 2012-04-23 13:09:29