хочется немного обсудить yii

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Многие тут юзают yii?
Взялся я проект делать на сабже. Код гармоничный, многие решения мне нравятся. Включение в поставку 3х полуфабрикатов, генератор моделей/форм/CRUD - классная идея.
Подпилить хочется многое.
С документацией задница - вроде, ее много, но кажется, что авторы доки страдают легкой формой аутизма.
За неделю кое-как осилил. Может, написать quick start guide / FAQ?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Если напишешь — скажу тебе большое человеческое спасибо, потому что я его доку не осилил, и очень хотелось бы иметь документ, который сможет быстро поставить меня up to speed.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Когда я только начал читать, я даже усомнился в своих способностях к пониманию и обучению.
Вспомни вопросы, которые у тебя появились, давай обсуждать.

Начало там простое - http://www.yiiframework.com/tour/,
Основные принципы размещения файлов и разделения кода всем знакомы, классика MVC - единой точка входа, контроллер, action.
Принцип именования классов понятен.

Несколько определений они "забыли" написать в доке, или написали так, что черт ногу сломит:
* По дефолту приложение размещено в папке htdocs/protected. Привязки нет, достаточно в точке входа поменять путь.
$config=__DIR__.'/protected/config/main.php'; -> '../application/config/main.php';
* контроллер по умолчанию называется SiteController.php
* вместо путей к файлам надо писать алиасы:
не include(APP_DIR.'/lib/class.php'), а Yii::import('application.lib.class'), где application - алиас на папку, точка - вместо "/", lib - папка в каталоге приложения, а к последнему слову прибавляется .php и считается именем файла
* автолоад находит файл класса модели по имени файла: MyForm -> models/MyForm.php, а для контроллера нужен суффикс: UserController -> Controllers/UserController.php
* для классов, названных по-своему, можно задать карту в точке входа: Yii::$classMap=array('ClassName1' => 'path/to/file.php',);
или сделать "импорт пакета" где угодно - Yii::import('application.mylib.*')

Я долго пытался понять значение понятия "Компонент", которое используется в каждом абзаце доки.
В общем, есть базовый класс CComponent, который расширяют все классы, которые используются в программе - контроллеры, модели, DAO, хелперы и т.п.
В CComponent прописана магия и колбеки, через которые можно делать mixin любого объекта yii.
Говоря по-русски, фреймворк создает свои объекты до вызова нашего кода, и при желании можно добавить свои методы и поля в эти объекты, не меняя фреймворк.
Вообще, можно в конкретном месте изменить работу любого наследника CComponent, не меняя существующий код.
Насколько быстро это работает и как потом поддерживать эти маленькие неожиданности - хез.

Yii надо править. Например, вся валидация, даже на numeric, делается регулярками.
Мне это кажется чреватым сегфолтами.

Что мне интересно - это интеграция с QuickForms, насколько легко заменить их построитель/валидатор форм своим.
 

MiksIr

miksir@home:~$
http://www.yiiframework.com/doc/guide/ вот вообще-то неплохой гайд.
Я использовал его + кукбук... сейчас, как я понял, кукбук уехал в вики.
В общем спорное ощущение от Yii... иногда, как мне кажется, он берет на себя слишком много. Конфиг, имхо, перегружен, в том плане, что задавать какие фильтры и компоненты будут подключены в конфиге не облегчает понимание того, как все работает для малознакомого с внутренностями Yii человека.
Но в общем есть у меня полтора проекта на Yii - забавно. Особо в понравился виджет аяксовой верификации полей через валидатор модели.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
неплохой - в смысле, большой и обо всем, но глубокому пониманию совсем не способствующий
я тут пытаюсь писать о том, что заставило меня искать ответы дольше, чем чтение нужного раздела
и на этой основе, если это будет интересно кому-то еще, составить короткий howto
 

MiksIr

miksir@home:~$
Глубокое понимание в документации по классам и исходниках ;) Разве бывает иначе? ;)
Почти все, что написано в вашем посте - там есть.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
спасибо, кэп
да, бывает - для ZF мне вполне хватило доки, и в исходники php можно не заглядывать

лучше расскажи про
виджет аяксовой верификации полей через валидатор модели.
, в основной доке он не описан

мне кажется, он берет на себя слишком много
что конкретно ты считаешь он брать на себя не должен?
 

MiksIr

miksir@home:~$
Немного о нем тут http://www.yiiframework.com/doc/guide/1.1/en/form.view ну и в описании CActiveForm www.yiiframework.com/doc/api/1.1/CActiveForm
На стороне сервера достаточно что-то вроде echo CActiveForm::validate($model); - он сам выплевывает все мессаджи валидатора аяксом в форму, а там JS-ник рассовывает.

> что конкретно ты считаешь он брать на себя не должен?
Сейчас уже не вспомню и как мне кажется, это ощущение скорее от виджетов всяких было.
Еще не нравилось сначала, что непонятно - где что тикает. Я привык к фильтрам, где открываешь запускающий файл и видно - какие фильтры подключаются и по названиям - что делают - сессии, разбор запроса, диспетчер. А тут нихрена непонятно ;) Хотя оно в общем и не особо мешает, что бы быстро что-то сварганить.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
вот как-раз описание где что и как тикает я и пытаюсь систематизировать
 

DYPA

Настоящая dypa (c)
с документацией у них беда, zii.widgets.CDetailView и zii.widgets.CListView забавные, один юзает eval, второй нет... со стандартизацией беда короче
поюзав 3 месяца и закончив проект понял что быстрее набить код руками чем писать под yii, к сожалению кодогенерация не сильно упрощает жизнь даже при написании админки...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ну, кодогенератор - забавная игрушка, мне лично понравилось :)
для моделей таблиц быстрее скопировать файл и подправить имя и связи,
а вот генератор простейших форм и CRUD для таблицы юзеров - прикольно, главное - очень быстро,
ну и многоразовое использование схемы форм по контексту - тоже неплохая идея, все-таки регистрация от редактирования профиля редко отличается

zii часто ругают, но никто и не заставляет
и не Joomla это, чтобы мышкой в админовке сайт строить, тут надо писать именно _свой_ код, по стандарту MVC
 

stmegabit

Новичок
На сайте русского сообщества ссылка сейчас попытались перевезти маны на великий и могучий. Но помоему голопам по европам. Поэтому если попробуете реализовать quick start guide от меня тоже огромное спасибо. Т.к у них есть интересные реализации. Недавно взялся за освоение MVC. Думаю потихоньку разработать небольшую CMS-ку для своей компании. Поэтому и для получения опыта и для обучения будет очень даже замечательно.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
stmegabit,
к сожалению, ее его просто перевели, но эта дока сама по себе ущербна.
Мне больше нравится Создание блога с использованием Yii.

Есть CMS-ка на основе yii, можно поискать. Если со структурой yii разобрался - доработать может быть проще.
 

stmegabit

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

grigori

( ͡° ͜ʖ ͡°)
Команда форума
что предлагаешь?
kohana мне не нравится, жду zf2
 

Вурдалак

Продвинутый новичок
Хоть тема и выливается в банальное сравнение фреймворков, но отдам голос за Symfony2. Сильно не ковырял, смотрел со стороны preview release, но понравилось очень. Финальный релиз, кстати, в марте обещают.

P.S. К сожалению, Yii почти не смотрел, вот уж о чём трудно судить.
 
  • Like
Реакции: AmdY

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ну, выйдет - глянем, может быть

yii мне нравится большей близостью к нативному php, попыткой объединить высокоуровневую архитектуру с кучей примочек для быстрого развертывания

Меня смущают конструкции со строковыми константами вида Core::factory('ClassName');
Я боюсь констант, эти вызовы не видны в outline-ах и списках мест упоминания имени класса, не поддаются автоматическому переименованию etc.
Синтаксис ClassName::model()->foo() мне комфортней.
Long недавно на фейсбуке пример написал:
‎$rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll();

Генераторы радуют, половина сайта идет в комплекте поставки. Много чего не нравится, но добавить свое явно не проблема.
 

MiksIr

miksir@home:~$
Иногда, даже, слишком с примочками.
Типа actionIndex($id) удобно, конечно, но кто плохо знающий Yii придет - голову сломает, откуда же это id берется.
Это хорошо, что автора еще отговорили типизацию этих параметров через phpDoc делать.
 

Splurov

Новичок
MiksIr
Да ну «голову сломает», по-моему наоборот сходу понятно, что это из урла «оставшиеся» части :) (я Yii в глаза не видел ни разу).
 
Сверху