Я полностью потерялся здесь … После проверки ввода я создаю экземпляр класса Message
и пытаюсь вставить данные в базу данных:
// send message $message = $this->model->build('message', true); $message->insertMessage($uid, $user->user_id, $title, $message);
Метод вставки очень прост:
// insert a new message public function insertMessage($to_id, $from_id, $title, $body) { $sql = "INSERT INTO messages (to_id, from_id, title, body, create_date) VALUES (:to_id, :from_id, :title, :body, NOW())"; $sth = $this->db->prepare($sql); return $sth->execute([':to_id' => $to_id, ':from_id' => $from_id, ':title' => $title, ':body' => $body]); }
Однако после подачи я заканчиваю пустой страницей, и в журнале ошибок Apache говорится:
[Tue Jul 30 22:34:44 2013] [error] [клиент 127.0.0.1] PHP Catchable fatal error: Объект класса framework \ models \ Message не может быть преобразован в строку в / var / www / p-lug / p -lug_lib / framework / models / Message.php в строке 18, референт: https: //p-lug.localhost/message/compose/4
Строка 18 относится к оператору return, но даже если я удаляю return
это приводит к той же ошибке.
Я прочитал бесчисленные ссылки относительно этой ошибки, но ни один из ответов не применим к моему примеру. Ни при каких обстоятельствах я не пытаюсь преобразовать объект в строку или вывести результат , и аналогичный код для вложений с другими классами работает отлично. Фактически, этот код был скопирован с другого рабочего примера, единственное, что изменилось, это таблица и данные.
Я использовал var_dump()
для всех передаваемых переменных, на $this
и $sth
, все проверяется. Но при execute()
он терпит неудачу. Что, черт возьми, происходит здесь?
Таким образом, $ message содержит объект.
Этот объект передается функции insertMessage как 4-й аргумент ($ body, который все еще является одним и тем же объектом)
Затем вы сохраняете объект Message, хранящийся в переменной $ body в массиве хэша, который передается в качестве аргумента для выполнения.
Функция execute пытается преобразовать объект Message в строку, но обнаруживает, что функция __toString не объявлена.
Поэтому либо объявляйте
public function __toString() { return $the_string; }
или создать другую публичную функцию / член, которую вы можете передать функции выполнения.
$message
которое передается аргументу $body
является объектом, возвращаемым из метода build()
в модели.
Вы можете просто вернуть сообщение, которое было построено в методе build()
а не как объект.