Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 05.06.2012 15:22:51

medar
Откуда: Москва
Сообщений: 36

Sam Dark о Laravel

Александр Макаров, один из разработчиков Yii framework написал пост о своих ощущениях от первого взгляда на Laravel: http://rmcreative.ru/blog/post/laravel

Основной косяк - проблема Mass-Assignment, которая сейчас во фреймворке решена не совсем корректно.

Не в сети

#2 05.06.2012 16:55:04

Re: Sam Dark о Laravel

Написано довольно честно и открыто, что радует.

Не в сети

#3 06.06.2012 08:46:15

medar
Откуда: Москва
Сообщений: 36

Re: Sam Dark о Laravel

Вообще, конечно, упомянутая проблема это однозначно фейл.
Каким способом можно предохраниться от лишних параметров на входе ? Если я делаю $user->not_exist_property = "some"; и потом $user->save(), то получаю эксепшн от БД. Да мне злоумышленник в hidden-полях накидает тысячи этих неиспользуемых полей. Получается, нельзя использовать автоматические вещи типа Input::all() и присваивать все вручную ? А если у меня у модели 100 свойств ? Можно, конечно, юзать класс форм, и там отсеивать, но это как-то не DRY совсем. Форм может быть много, лишняя работа.

В классе модели я вижу свойство $attributes , но в хелпе про него ничего не сказано, как его задавать, как с ним работать и т.п. Если это не схемизация модели, то надо делать как в Кохане или типа того. Движок, если не видит схемы, лезет в БД, по SHOW COLUMNS смотрит структуру таблицы и строит $attributes модели и, кстати, фильтры для валидации. И при fill() или save() отбирает для присваивания только те столбцы, что есть в таблице.

Или я что-то пропустил ?

Не в сети

#4 06.06.2012 20:53:04

Re: Sam Dark о Laravel

Ты не поверишь, но PHP$attributes появился уже после 3.0 (или при релизе оной), причём после скринкаста Shawn на эту тему. Насколько я знаю это единственный штатный способ в Laravel как-то ограничить запись в БД — более того, он и работает только для метода PHPfill(), то есть ты запросто можешь сделать PHP$model->some_field 'x'; и PHP$attributes этой модели ничего не изменит.

Если для тебя важна эта «дырка», единственный вариант — наследовать модель и самому встроить туда подход Yii. Получится гибрид модели и схемы, Либо при принятии формы отсеивать лишние поля, если форма генерится из какого-то источника, где есть их список (для болших форм так обычно и бывает). Если форма маленькая, лучше использовать прямое присвоение атрибутов (PHP$model->some_field 'x';).

Думаю, такой подход был изначльно выбран в стиле общей идеологии Laravel — компактный каркас с лёгким ядром, где разработчик «знает, что делает» (даже если и делает то, что не знает). Хотя не исключаю, что в будущей версии Тейлор встроит какую-то валидацю.

Не в сети

Подвал раздела