Большой переключатель в представлении - PullRequest
1 голос
/ 27 мая 2011

Я новичок в MVC и php framework, поэтому, пожалуйста, извините за этот простой вопрос ...

Мне нравится, когда мои взгляды не имеют большого количества 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 ]

4 голосов
/ 27 мая 2011

Помощник вида не сделает ваш код менее двусмысленным или лучше MVC.Текст для представления может не принадлежать модели, но логика определения текста определенно не принадлежит представлению.В написании такого метода, как $model->getViewTextForState($object->getState()), нет ничего плохого - это в основном тот же подход, который вы использовали бы для локализации строк для множества языков.к модели, потому что модель отвечает за сортировку ВСЕХ данных.Если какой-то текст в представлении является переменным, то это буквально данные модели, точно так же, как имя изображения, которое вы создаете методом $object->getState().Имя изображения и альтернативный текст для него являются данными и должны быть предоставлены представлению из модели с помощью метода доступа в одну строку

1 голос
/ 27 мая 2011

Переключатель может быть в вашем действии, и вы можете использовать строки перевода, подобные этой

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

, тогда, по вашему мнению, перевод $ sText сделает свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...