【问题标题】:Phalcon assign view variable inconsistentPhalcon分配视图变量不一致
【发布时间】:2015-03-05 14:15:36
【问题描述】:

在将变量分配给视图时无法获得一致的行为。例如:

在控制器中:

$this->view->media = Media::findFirst(['groupId=0', 'order' => 'RAND()', 'limit' => 1]);

在视图中:

        {% if media is defined %}
        <div class="thumbnail">
            <img src="{{ static_url('img/media/thumbs/' ~ media.name) }}" class="img-round">
            <div class="caption">
                <h3>{{ media.title }}</h3>
                <p>{{ media.description }}</p>
            </div>
        </div>
        {% endif %}

解析如下:

        <?php if (isset($media)) { ?>
        <div class="thumbnail">
            <img src="<?php echo $this->url->getStatic('img/media/thumbs/' . $this->media->name); ?>" class="img-round">
            <div class="caption">
                <h3><?php echo $this->media->title; ?></h3>
                <p><?php echo $this->media->description; ?></p>
            </div>
        </div>
        <?php } ?>

问题是当模板的解析版本时,$media 不能通过 $this 访问,所以 isset($media) 通过,但是对 $this->media 的引用什么都不返回。

有什么方法可以强制 $media 在范围内是本地的?

【问题讨论】:

  • 看过一次。当时是因为我在控制器中分配了$this-&gt;data$this-&gt;view-&gt;data。我和你的情况一样吗?
  • 不错的建议,但上面的代码是实际的复制/粘贴,所以它是正确的。有趣的是,看起来一切都在 $this-> 范围内,直到它在控件中使用(例如 {% for item in medias %} ),然后 item 是本地的。我目前的解决方法是使用 $model->toArray() 将其作为数组传递

标签: phalcon volt


【解决方案1】:

我想我明白了。

不当行为描述

您可能已经在您的DI() 中声明了一个media 模块。我尝试了很多方法来重现该错误,当我在配置文件中设置了一个愚蠢的media 服务时,最终得到了它:

$di->set('media', function() {
    return new \stdClass();
});

并且得到与您相同的行为 - 编译期间的 Volt 不确定,使用什么变量并选择 $this-&gt;media (DI::get('media')) 而不是 $media$this-&gt;view-&gt;media var 获取数据。

解决方案

如果您不想放弃在该变量名称下调用 findFirst 结果,您可以直接使用 View in volt 绕过它:

{% if view.media is defined %}
    <div class="thumbnail">
        <img src="{{ static_url('img/media/thumbs/' ~ view.media.name) }}" class="img-round">
        <div class="caption">
            <h3>{{ view.media.title }}</h3>
            <p>{{ view.media.description }}</p>
        </div>
    </div>
{% endif %}

它将生成$this-&gt;view-&gt;media 调用而不是$this-&gt;media 调用。

+1 就那个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多