Метод xPDOObject::fromArray()
fromArray( array $assocArray, [string $keyPrefix = ''], [boolean $setPrimaryKeys = false], [boolean $rawValues = false], [boolean $adhocValues = false] )
Пример создания нового ресурса с присвоением ему значений.
$fields = array( 'pagetitle' => 'Новый ресурс', 'alias' => 'new_page', 'published' => '1', 'hidemenu' => '0', 'introtext' => 'Этот ресурс создан программно.', ) $resource = $modx->newObject('modResource'); $resource->fromArray($fields); $resource->save();
Тут нужно отметить, что метод fromArray()
присваивает значение для каждого поля объекта через метод set()
, т.е. значение преобразуется согласно модели. Например, даты переводятся в UNIX timestamp формат, массивы в JSON формат, пароли хешируются и т.д. Но что, если нужно присвоить именно переданное значение без его обработки? Можно, конечно, сделать отдельное присвоение такому полю
$resource->field = 'Значение, которое не нужно конвертить';
Но в методе fromArray()
есть параметр, который отключает конвертирование значений — $rawValues
. Достаточно указать true, и данные перенесутся без изменений.
Еще один момент, с которым я столкнулся при работе с этим методом — передача первичных ключей. В чём проблема? Если вы передаёте первичный ключ в массиве значений, то он не присвоится. Это проблема обычно возникает при работе с пользовательскими объектами. Пример такого кода
$fields = array( 'country' => 'Russia', /* Первичный ключ */ 'city' => 'Moscow', /* Первичный ключ */ 'population' => '12000000', ) $city->fromArray($fields); $city->save(); // Значения county и city не сохранятся (будут пустые).
Эта проблема решается параметром $setPrimaryKeys
. Т.е. вызывать нужно так
$fields = array( 'country' => 'Russia', /* Первичный ключ */ 'city' => 'Moscow', /* Первичный ключ */ 'population' => '12000000', ) $city->fromArray($fields,'',true); $city->save();
Ну и давайте пробежимся по оставшимся параметрам метода:
- $prefix — вырезает указанную строку (префикс) из ключей массива.
- $adhocValues — если «true», то для несуществующих полей у объекта создаются свойства с именами таких ключей. Используется редко. Я не видел его применения.
Комментарии ()
Вы должны авторизоваться, чтобы оставлять комментарии.
Допустим мы спарсили какую то информацию с сайта раскидали её по массивам. И как нам теперь эти массивы сохранить в ресурсы modx?
Например у нас много много много вот таких массивов:
Даже если сделать вот так:
Функция перестаёт работать если добавить:
на
Без него работает с ним нет.
:w