CakePHP 3.7: имя функции должно быть строкой - PullRequest
0 голосов
/ 17 мая 2019

У меня есть метод в 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());

все, что я получаю, это ошибка: имя функции должно быть строкой

Есть идеи?

1 Ответ

1 голос
/ 17 мая 2019

У вас неправильный синтаксис для доступа к массивам в PHP, используйте квадратные скобки:

$mailbox->username = $data['username'];
$mailbox->name = $data['name'];

То, как вы его получили, пытается вызвать функцию с переменной, названной в $data, но $ data - это массив, а не строка (см. Функции переменных для получения дополнительной информации об этом).

Также не следует устанавливать пользовательский ввод непосредственно в свойствах $ 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'));
}
...