我是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次。对我来说,文本应该属于视图,而不是模型。
也许是一个将文本分配给状态的视图助手?
答案 0 :(得分:4)
视图助手不会使您的代码变得不那么模糊或更好MVC。视图的文本可能不属于模型,但确定文本的逻辑肯定不属于视图。编写类似$model->getViewTextForState($object->getState())
的方法没有任何问题 - 这与您用于多种语言的字符串本地化的方法基本相同。
以这种方式思考 - 视图的替代文本确实属于模型,因为模型负责编组所有数据。如果视图中的某些文本是可变的,那么它就是字面上的模型数据,就像您从$object->getState()
方法生成的图像名称一样。图像名称和替代文本是数据,应使用单行访问方法从模型提供给视图
答案 1 :(得分:1)
切换可能在您的操作中,您可以使用这样的翻译字符串
$this->sText = 'object_state_' . $object->getState()
然后在你看来,翻译$ sText就可以了。