2016-05-09 54 views
0

我希望能夠將實體定義的常量轉換爲其相關的文本值。 我刪除了大部分與問題無關的代碼,以便更好地進行概述。Symfony 3實體常量到樹枝中的文本

藤實體

/** 
* Todo 
* 
* @ORM\Table(name="todo") 
* @ORM\Entity(repositoryClass="TodoBundle\Repository\TodoRepository") 
* @ORM\HasLifecycleCallbacks 
*/ 
class Todo 
{ 
    const PRIORITY_HIGH = 2; 
    const PRIORITY_NORMAL = 1; 
    const PRIORITY_LOW = 0; 

    /** 
    * @var int 
    * 
    * @Assert\NotBlank(groups={"new", "edit"}) 
    * @Assert\Choice(callback="getPriorities") 
    * 
    * @ORM\Column(name="priority", type="integer") 
    */ 
    private $priority; 

    /** 
    * Set priority 
    * 
    * @param integer $priority 
    * 
    * @return Todo 
    */ 
    public function setPriority($priority) 
    { 
     $this->priority = $priority; 

     return $this; 
    } 

    /** 
    * Get priority 
    * 
    * @return int 
    */ 
    public function getPriority() 
    { 
     return $this->priority; 
    } 

    /** 
    * Get all priorities 
    * 
    * @return int 
    */ 
    public static function getPriorities() 
    { 
     return array(
      'High'  => self::PRIORITY_HIGH, 
      'Normal' => self::PRIORITY_NORMAL, 
      'Low'  => self::PRIORITY_LOW 
     ); 
    } 
} 

嫩枝概述

{% for todo in todos %} 
    <tr> 
     <td>{{ todo.title }}</td> 
     <td>{{ todo.content }}</td> 
     <td>{{ todo.priority }}</td> *Change this to output High, Normal or Low according to its set priority* 
     <td>{{ todo.duedate|date('d/m/Y') }}</td> 
     <td> 
      <div class="btn-group" role="group"> 
       <a href="{{ path('todo.show', {'id': todo.id }) }}" class="btn btn-success">View</a> 
       <a href="{{ path('todo.edit', {'id': todo.id }) }}" class="btn btn-warning">Edit</a> 
       <a href="{{ path('todo.delete', {'id': todo.id }) }}" class="btn btn-danger">Delete</a> 
      </div> 
     </td> 
    </tr> 
{% endfor %} 

當使用FormBuilder創建一個表單我能夠調用這段代碼

->add('priority', ChoiceType::class, array(
    'choices' => Todo::getPriorities() 
)) 

充滿在這樣

<select id="new_priority" name="new[priority]" class="form-control"> 
    <option value="2">High</option> 
    <option value="1" selected="selected">Normal</option> 
    <option value="0">Low</option> 
</select> 

我希望這是可以做到的或以另一種方式實現文本和值以創建dorpdown場,這將是實現在後面的體育場的翻譯非常有用。

回答

3

嘗試使用上逆向返回一個關聯數組的另一種方法,那就是,例如:

public static function getPrioritiesForSelect() 
{ 
    return array(
     self::PRIORITY_HIGH  => 'High', 
     self::PRIORITY_NORMAL => 'Normal', 
     self::PRIORITY_LOW  => 'Low' 
    ); 
} 

然後,你就可以翻譯,如「高」,「正常」的字符串,

如果您不喜歡該解決方案,如果您使用的是基於翻譯ID字符串的翻譯結構,那麼您可以再次創建另一個方法,該方法返回由前綴和常量組成的串聯字符串價值,然後,翻譯它。事情是這樣的:

public static function getPrioritiesForSelect() 
{ 
    return array(
     'High'  => 'string.priority.' . self::PRIORITY_HIGH, 
     'Normal' => 'string.priority.' . self::PRIORITY_NORMAL, 
     'Low'  => 'string.priority.' . self::PRIORITY_LOW 
    ); 
} 

在你的翻譯文件,你會是這樣的:

string: 
    priority: 
     2: 'High' 
     1: 'Normal' 
     0: 'Low' 
+0

我居然落得這樣做的方式differen和使用twigextensions到迴文本表示轉換。但你的作品也是一個更簡單的印象! –