【发布时间】: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->data和$this->view->data。我和你的情况一样吗? -
不错的建议,但上面的代码是实际的复制/粘贴,所以它是正确的。有趣的是,看起来一切都在 $this-> 范围内,直到它在控件中使用(例如 {% for item in medias %} ),然后 item 是本地的。我目前的解决方法是使用 $model->toArray() 将其作为数组传递