Phalcon передает объект из контроллера в поле зрения

Я новичок в phalcon, и мне интересно, как правильно передать некоторые данные из контроллера в представление из базы данных. Например

$lastOrder = LeaOrder::findFirst([   
    'conditions' => 'user_id = ?1',
    'order' => "id DESC",
    'bind'       => [
        1 => $userID,
    ]
]);


$this->view->setVars([
    'lastOrder'=> $lastOnGoingOrder,
]);

Могу ли я показать данные для пользователя из объекта LeaOrder, например {{lastOrder->name}}, или я должен сделать toArray() перед передачей объекта в поле зрения, а затем {{lastOrder[name]}} или это не имеет значения, как я обрабатываю это? спасибо за все советы,


person boosterV    schedule 01.02.2018    source источник


Ответы (1)


Вы даже можете использовать быстрый синтаксис:

$this->view->lastOrder = LeaOrder::findFirst([   
    'conditions' => 'user_id = ?1',
    'order' => "id DESC",
    'bind'       => [
        1 => $userID,
    ]
]);

В представлении:

// To access object properties
{{ lastOrder.name }}

// To access array keys
{{ lastOrder['name'] }}

Phalcon ORM возвращает объекты модели, однако, если вам действительно нужен массив, вы можете вызвать метод ->toArray() для своего объекта.

Я бы посоветовал вам прочитать этот раздел из документации: https://docs.phalconphp.com/en/3.2/volt Фильтры - раздел тоже очень полезен.

ОБНОВЛЕНИЕ: отладка результатов ORM. Когда вы выгружаете результат ORM, вы видите массу информации из-за DI (внедрения зависимостей), который использует Phalcon. Одним из простых способов отладки является вызов ->toArray() для вашей модели. Таким образом, вы будете видеть только свойства модели.

$this->view->order = LeaOrder::findFirstById(82);
print_r($this->view->order->toArray();

Но обратите внимание: toArray() преобразует ваш объект в массив, но поскольку вы не назначаете его, а просто делаете это внутри print_r для целей отладки, позже вы будете использовать его как объект в своем коде/шаблоне.

ОБНОВЛЕНИЕ 2: удобная функция для отладки Phalcon

function d($what)
{
    if (is_object($what) AND method_exists($what, 'toArray')) {
        $what = $what->toArray();
    }
    echo '<pre>';
    print_r($what);
    die('</pre>');
}

// Usage:
$this->view->order = LeaOrder::findFirstById(82);
d($this->view->order);
person Nikolay Mihaylov    schedule 01.02.2018
comment
Еще одна вещь: когда {{dump(lastOrder)}} я получаю тонны информации с моим результатом, например детали паролей базы данных, нет никакого способа поймать это пользователями, верно (извините за глупый вопрос)? - person boosterV; 01.02.2018
comment
Обновлено выше :) - person Nikolay Mihaylov; 01.02.2018
comment
Спасибо, я ценю это. Еще одна вещь, должен ли я оставаться с объектом или массивом при представлении данных пользователю? каким образом это нужно сделать? - person boosterV; 01.02.2018
comment
Это ваше личное предпочтение. В большинстве случаев я использую Objects и Array только в том случае, если мне нужно обработать данные или передать их куда-то как json. Технически преобразование массива будет стоить вам некоторых ресурсов сервера :) Также я предпочитаю объект (точечный синтаксис) в моих шаблонах Volt. - person Nikolay Mihaylov; 01.02.2018
comment
Привет снова! Обновленный ответ с моей удобной функцией отладки. Если вы передаете объект ORM, он автоматически преобразуется в массив для быстрого предварительного просмотра отладки :) - person Nikolay Mihaylov; 01.02.2018