在symfony2中定义与实体相关的静态数组的位置?

时间:2014-07-03 11:22:03

标签: arrays symfony static twig

我有一个数组包含与实体产品

相关的静态数据
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视图加入数据?

由于

2 个答案:

答案 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 }}