CakePHP 3.7:函数名称必须是字符串
CakePHP 3.7: Function name must be a string
我在 UsersController 中有一个方法
public function addMailbox($data)
{
$this->LoadModel('Mailbox');
$mailbox = $this->Mailbox->newEntity();
$mailbox->username = $data('username');
$mailbox->name = $data('name');
if ($this->Mailbox->save($mailbox)) {
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('Error'));
}
,代码在粘贴到 add() 方法时工作正常,但在使用
之后
$this->addMailbox($this->request->getData());
我得到的只是
错误:函数名必须是字符串
有什么想法吗?
您在 PHP 中访问数组的语法错误,请使用方括号:
$mailbox->username = $data['username'];
$mailbox->name = $data['name'];
你得到它的方式,它试图用 $data
中命名的变量调用一个函数,但 $data 是一个数组而不是字符串(有关更多信息,请参见 Variable functions那个)。
此外,您不应直接在 $mailbox 属性上设置用户输入 - 这会绕过验证。而只是将 $data 粘贴到 newEntity()
:
public function addMailbox($data)
{
$this->loadModel('Mailbox'); // This also is not required if this function is inside the MailboxController
$mailbox = $this->Mailbox->newEntity($data);
if ($this->Mailbox->save($mailbox)) {
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('Error'));
}
我在 UsersController 中有一个方法
public function addMailbox($data)
{
$this->LoadModel('Mailbox');
$mailbox = $this->Mailbox->newEntity();
$mailbox->username = $data('username');
$mailbox->name = $data('name');
if ($this->Mailbox->save($mailbox)) {
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('Error'));
}
,代码在粘贴到 add() 方法时工作正常,但在使用
之后 $this->addMailbox($this->request->getData());
我得到的只是 错误:函数名必须是字符串
有什么想法吗?
您在 PHP 中访问数组的语法错误,请使用方括号:
$mailbox->username = $data['username'];
$mailbox->name = $data['name'];
你得到它的方式,它试图用 $data
中命名的变量调用一个函数,但 $data 是一个数组而不是字符串(有关更多信息,请参见 Variable functions那个)。
此外,您不应直接在 $mailbox 属性上设置用户输入 - 这会绕过验证。而只是将 $data 粘贴到 newEntity()
:
public function addMailbox($data)
{
$this->loadModel('Mailbox'); // This also is not required if this function is inside the MailboxController
$mailbox = $this->Mailbox->newEntity($data);
if ($this->Mailbox->save($mailbox)) {
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('Error'));
}