【问题标题】:Phalcon pass object from controller into viewPhalcon 将对象从控制器传递到视图
【发布时间】:2018-02-01 07:51:18
【问题描述】:

我是 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]}},或者这与我处理这个无关?谢谢大家的建议,

【问题讨论】:

    标签: phalcon volt


    【解决方案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 返回 Model 对象,但是如果您确实需要一个数组,您可以在您的对象上调用 ->toArray() 方法。

    我建议您阅读文档中的本部分:https://docs.phalconphp.com/en/3.2/volt Filters - 部分也非常有用。

    更新:调试 ORM 结果。 在转储 ORM 结果时,由于 Phalcon 正在使用 DI(依赖注入),您会看到大量信息。一种简单的调试方法是在您的模型上调用->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);
    

    【讨论】:

    • 还有一件事,当 {{dump(lastOrder)}} 我的结果中有大量信息(例如数据库密码详细信息)时,用户无法正确捕捉到这一点(对不起,愚蠢的问题)?
    • 以上更新:)
    • 谢谢,我很感激。还有一件事,在向用户呈现数据时我应该使用对象还是数组?应该采用哪种方式?
    • 这是您的个人喜好。在大多数情况下,我仅在需要处理数据或将其作为 json 传递到某处时才使用对象和数组。从技术上讲,数组转换将花费您一些“服务器资源”:) 另外,我更喜欢 Volt 模板中的对象(点语法)。
    • 你好!用我方便的调试功能更新了答案。如果您传递 ORM 对象,它会自动转换为数组以进行快速调试预览:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2019-07-06
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多