YiiFramework Опасность в архитектуре yii Active Record

Ragazzo

TDD interested
fixxxer
хз, я видимо не сталкивался с кучей таких небрежностей или не вижу их в силу того что я не настолько профи как ты)
 

fixxxer

К.О.
Партнер клуба
Ну в основном мелочи но все равно неприятно.

Вот недавно выкатывал кусок кода на Yii на прод. Валится с "driver not found" Вот not found и привет. Ё, какой драйвер? pdo/mysql стоит, в еррор логах пустота. Не, ну я не пугливый, ставлю прямо в перденя var_dump($exception) в его catch, вижу sqlite, офигеваю, понимаю, что сессии по дефолту в него, офигеваю еще, перебиваю на apc, все хорошо. Не, ну в sqlite по дефолту так в sqlite, ладно, но можно message оригинального exception показывать, пожалуйста? )
 

Ragazzo

TDD interested
fixxxer
да, эта проблема обсуждалась в одном из issues Кьенгом(проблема именно когда какой-либо из драйверов не найден и непонятно какую схему использовать), но там были свои скажем так тонкости) Есть еще пара моментов где нужно детальнее сообщение эксепшена сделать, Александр говорил что нужно тоже подумать над тем как в некоторых местах детальнее сообщения показывать (на хабре там был тоже какой-то пост) :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ragazzo в 2ке metadata вынесен из AR вообще. Ниче, там новый говнокод будет, еще накушаемся.

MiksIr а вот кодер мой не читал внутренности yii и не знает, что нельзя перекрывать конструктор. Он публичный - значит, можно. И в доках про запрет перекрытия конструктора ничего не сказано. А мысли он читать не умеет.

fixxxer у них 5.2+ :(

keltanas У меня есть коммиты и багрепорты в yii, и основания злиться лично на Тяна, и еще я багфикс на это пулреквестну, а что сделал ты, чтоб ругать?
>Я не сомневаюсь что ты хороший разработчик
А я считаю, что это очередной пионэр, и буду молча вычищать раздел yii от его будущих постов.

исправление элементарное
в CActiveRecord
PHP:
//добавить
static protected function generateMetaData($model){return new CActiveRecordMetaData($model);
//изменить
	public function getMetaData()
	{
		if($this->_md!==null)
			return $this->_md;
		else
			//вместо return $this->_md=self::model(get_class($this))->_md;
			return $this->_md=self::generateMetaData(get_class($this));;
	}
 

Ragazzo

TDD interested
grigori
А я считаю, что это очередной пионер, и буду молча вычищать раздел yii от его будущих постов.
ну нельзя же так плохо к людям относиться? или можно? :D что ответил Кьенг?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ragazzo я это вместе с багрепортом и пул-реквестом напишу, чтоб или уперся, как обычно, выбросил по BC break, и стал упрямым идиотом, или скушал
 

Ragazzo

TDD interested
grigori
Серьезный настрой. Я думаю примут, ведь команда расширилась значительно, теперь там демократия :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
классно! :)

да тут и без хаков решается - правда, на 5.2 придется на call_user_func()
 

MiksIr

miksir@home:~$
MiksIr а вот кодер мой не читал внутренности yii и не знает, что нельзя перекрывать конструктор. Он публичный - значит, можно. И в доках про запрет перекрытия конструктора ничего не сказано. А мысли он читать не умеет.
Ну теперь знает, чо. Я ж не говорю, что это хорошо. Просто так есть.
Я бы вот вообще из всего Yii оставил бы active records c датамапером, а все остальное заменил чем-нить или переписал.
 

Ragazzo

TDD interested
MiksIr
А что именно заменить то? Обычно AR хотят переписать :) вон grigori например.
 

fixxxer

К.О.
Партнер клуба
Вот так вот легко и непринужденно пришли к выводу, что переписать надо всё.

:D :D :D
 

Ragazzo

TDD interested
fixxxer
ага, кстати заметил, что если появляются такие мысли, то это значит надо потихоньку двигать в тот самый пресловутый энтерпрайз с их оверинжинирингом))
 

MiksIr

miksir@home:~$
MiksIr
А что именно заменить то? Обычно AR хотят переписать :) вон grigori например.
Не знаю, мне нравится. Еще бы какое-нить решение по эскейпингу имен связей в условиях... а то постгрес ругается.
А вот application не очень нравится. Щас то привык, а в начале было сложно понять, как вся эта кухня работает. Особо после лимбовских цепочек фильтров. Но в общем и с этим можно жить.
 

MiksIr

miksir@home:~$
Вот создадут же тикет... откуда там st_astext(PrimaryLocation.geometry) AS geometry_wkt взялось?
Я про когда в 'condition' что-то пишешь... ну или через критерий, все-равно. Типа 'relationName.name = :name'
 

Ragazzo

TDD interested
MiksIr
а, ок, понял походу) ну создай issue или сабмитни pr если будешь свободен, все равно дело добровольное же))
 

MiksIr

miksir@home:~$
Так ну я не представляю как это красиво сделать. Ничего кроме тупо пробежаться по строке условия в поисках строк совпадающих с именами связей в голову не идет. Но это настолько костыльное решение, что его предлагать никому не буду ;)
 
Сверху