视图中的大开关

时间:2011-05-27 16:37:17

标签: model-view-controller view symfony1

我是MVC和php框架的新手,所以请原谅我这个简单的问题......

我喜欢在没有大量PHP代码的情况下拥有自己的观点,但我有一个案例,我真的不知道该怎么做。

基本上一些对象有20多种不同的状态,状态由模型给出。 现在我有了:

switch($object->getState())
{
  case 0:
    $sText = '...'; 
  break;
  case 1:
    $sText = '... on the'.$object->getDate(); 
  break;
  ...
  case 20:
    $sText = '...'; 
  break;
}
?>
<img src="<?echo $object->getState()?>.png" alt = "<?echo $sText;?>" 
title = "<?echo $sText;?>" /> 

如果视图中没有40多行php,我该怎么做?我不想重复<img>标签20次。对我来说,文本应该属于视图,而不是模型。

也许是一个将文本分配给状态的视图助手?

2 个答案:

答案 0 :(得分:4)

视图助手不会使您的代码变得不那么模糊或更好MVC。视图的文本可能不属于模型,但确定文本的逻辑肯定不属于视图。编写类似$model->getViewTextForState($object->getState())的方法没有任何问题 - 这与您用于多种语言的字符串本地化的方法基本相同。

以这种方式思考 - 视图的替代文本确实属于模型,因为模型负责编组所有数据。如果视图中的某些文本是可变的,那么它就是字面上的模型数据,就像您从$object->getState()方法生成的图像名称一样。图像名称和替代文本是数据,应使用单行访问方法从模型提供给视图

答案 1 :(得分:1)

切换可能在您的操作中,您可以使用这样的翻译字符串

$this->sText = 'object_state_' . $object->getState()

然后在你看来,翻译$ sText就可以了。