грамотное использование View

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

грамотное использование View

Сообщение fly2k »

Ку!

Немного не понравилось как реализованы вьюхи. Ну или я не очень понял идеи. Вроде как MVC - про объекты всегда было, а тут вьюхи - обычные портянки. Не очень понятно куда пихать вспомогательные функции для вьюх - в модель, контроллер или отдельный вспомогательный класс. Куча отдельных файлов тоже немного напрягает - иногда даже путаюсь когда работаю с несколькими видами нескольких моделей. В общем, сложилось какой то ощущение что тут всё не совсем трувэй. Я ничего против не имею, и вообще я особо не шарю. Поэтому, надеюсь, что гуру направят на путь истинный и помогут вкурить суть :)

Немного конкретики. Вот не понравилась мне реализация менюхи для операций над моделькой, хотя это наверное про Gii больше, однако.
Понятно, что у разных вьюх могут быть разные менюхи, но для основных операций менюха фактически одна, что я и сделал:

Код: Выделить всё

	public static function makeMenu($action = '*', $id = 0)
	{
		$return = array();
	
		if($action != 'index' && $action != 'tree')
			$return[] = array('label'=>'List Tags', 'url'=>array('index'));
		if($action != 'admin')
			$return[] = array('label'=>'Manage Tags', 'url'=>array('admin'));
	
		if($action != 'create')
			$return[] = array('label'=>'Create Tag', 'url'=>array('create'));
	
		if($action == 'view' || $action == 'update')
			$return[] = array('label'=>'<hr>');
	
		if($action == 'view')
			$return[] = array('label'=>'Edit Tag', 'url'=>array('update', 'id'=>$id));
		if($action == 'update')
			$return[] = array('label'=>'View Tag', 'url'=>array('view', 'id'=>$id));
		if($action == 'view' || $action == 'update')
			$return[] = array('label'=>'Delete Tag', 'url'=>'#', 'linkOptions'=>array('submit'=>array('delete','id'=>$id),'confirm'=>'Are you sure you want to delete this item?'));
	
		return $return;
	
	}
Мне так кажется правильнее :) Так вот, куда эту функцию приписать? Вспомогательный класс по каждому пуку писать - как то хз. Пихать в модель или контроллер - опять не трувей: про "объект" вьюхи речь то...

В общем, подсказывайте кто что может :)

Зараенее огромное спасибо :)
// Yii2Rulez!
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: грамотное использование View

Сообщение rak »

все эти дела можно разбросать по виджетам.
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Re: грамотное использование View

Сообщение fly2k »

То есть сделать свой виджет менюхи индивидуально для конкретной модели? Или универсальный виджет базовых операций над любой моделью? Интересно, подумаю...

Однако, вопрос со вспомогательными функциями для вьюх открыт, ибо не всегда виджетом его покроешь. К примеру, моя модель тэгов иерархическая, и в index я рисую дерево, виджет CTreeView меня в этом плане устраивает, но нужна вспомогательная функция по получения данных из модели для передачи в виджет CTreeView. Хотя ее то как раз можно уместить в класс модели...

Получается, трувэй - это когда портянка вьюхи минимальна, а весь код про эту вьюху выносится в свои виджеты?

В этой связи еще вопрос. Как правильно заворачивать виджеты один в другой? Например, можно в том же CTreeView, в соответсвующее поле 'text' каждого элемента запихивать вывод какого то другого виджета? Не будет ли недоразумений в HTML/JS/AJAX и тд?
// Yii2Rulez!
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: грамотное использование View

Сообщение rak »

fly2k писал(а): Получается, трувэй - это когда портянка вьюхи минимальна, а весь код про эту вьюху выносится в свои виджеты?
именно, портянки кода - это печально в любых проявлениях
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Re: грамотное использование View

Сообщение fly2k »

вот именно меня и смутило что в результате работы Gii получились портяночки для вьюх, хоть они и маленькие изначально, но довольно неприятные(чего только стоит куча переходов php<>html) - не располагают к грамотной разработке ;)

Хм... а что получится при грамотном подходе? В каждой вьюхе будет лишь вызов соответсвующего виджета? То есть 5-10 строк? :) Так то круто, но только опять же как то мозг выносит - по файлу на каждые несколько строк? Ну я это я так - капризничаю уже наверное :)
// Yii2Rulez!
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: грамотное использование View

Сообщение yan »

вообще-то вьюхи это просто шаблон для вывода (не путать с бизнес-логикой), как его сформировать это ваше дело, хотите используйте шаблонизатор на выбор, но тогда пропадает гибкость работы с возможностями виджетов фреймворка, можете даже использовать хамл - для особо утонченных эстетов.
Я лично сейчас уже не вижу особых проблем использовании непосредственно пхп во вьюхе, все таки пхп по рождению сам шаблонизатор, получается очень гибко и при продуманном подходе вполне понятно, слишком большие куски кода или код который может использоваться в нескольких местах - выносится в виджеты, код какой-то специальной подготовки для вывода данных - в модели.
Кстати видел некоторые маньяки целиком формируют вьюхи из хелперов CHtml - попробуйте, возможно это ваш путь :) Долго-муторно, зато все правильно и красиво.
Ответить