我有一个数组包含与实体产品:
相关的静态数据public static $category = array(
1 => 'animal.png',
2 => 'blague.png',
3 => 'devinette.png',
4 => 'enfant.png',
5 => 'h-f.png',
6 => 'nationalite.png',
7 => 'politique.png',
8 => 'sport.png',
9 => 'name',
10 => 'travail.png',
11 => 'vulgaire.png',
12 => 'autre.png',
);
我应该在哪里声明数组?
我如何从Twig视图加入数据?
由于
答案 0 :(得分:5)
我不知道这是不是最好的方式,但是我使用的代码类似于你的代码:
class Product
{
protected static $category = array(
1 => 'animal.png',
2 => 'blague.png',
3 => 'devinette.png',
// ...
)
);
}
然后,您可以在此类中添加一些函数,以便从数组中获取数据
public function getCategoryImageFromIndex($a)
{
return self::$category[$a];
}
// if you have a getter getCategory() which returns the category of the Product
public function getCategoryImage()
{
return self::$category[$this->getCategory()];
}
然后你可以从Twig调用这些函数:
{{ product.categoryImageFromIndex(1) }}
将显示:
animal.png
和
{{ product.categoryImage }}
将显示该类别中的相应图像。
答案 1 :(得分:2)
我总是使用Twig扩展函数来访问静态数组。
例如,在我的Order实体中,我有类似的东西:
class Order
{
const ORDER_STATUS_PENDING = 0;
const ORDER_STATUS_AWAITING_PAYMENT = 1;
const ORDER_STATUS_COMPLETE = 2;
public static $ORDER_STATUS_DISPLAY = [
self::ORDER_STATUS_PENDING => 'Pending',
self::ORDER_STATUS_AWAITING_PAYMENT => 'Order placed',
self::ORDER_STATUS_COMPLETE => 'Order completed',
];
然后假设您已经注册了Twig_Extension class,请创建一个新的过滤功能:
public function displayOrderStatus($orderStatus)
{
return Order::$ORDER_STATUS_DISPLAY[$orderStatus];
}
最后,在Twig模板中使用过滤器:
{{ order.orderStatus|displayOrderStatus }}