Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Александр Макаров, один из разработчиков Yii framework написал пост о своих ощущениях от первого взгляда на Laravel: http://rmcreative.ru/blog/post/laravel
Основной косяк - проблема Mass-Assignment, которая сейчас во фреймворке решена не совсем корректно.
Не в сети
Не в сети
Вообще, конечно, упомянутая проблема это однозначно фейл.
Каким способом можно предохраниться от лишних параметров на входе ? Если я делаю $user->not_exist_property = "some"; и потом $user->save(), то получаю эксепшн от БД. Да мне злоумышленник в hidden-полях накидает тысячи этих неиспользуемых полей. Получается, нельзя использовать автоматические вещи типа Input::all() и присваивать все вручную ? А если у меня у модели 100 свойств ? Можно, конечно, юзать класс форм, и там отсеивать, но это как-то не DRY совсем. Форм может быть много, лишняя работа.
В классе модели я вижу свойство $attributes , но в хелпе про него ничего не сказано, как его задавать, как с ним работать и т.п. Если это не схемизация модели, то надо делать как в Кохане или типа того. Движок, если не видит схемы, лезет в БД, по SHOW COLUMNS смотрит структуру таблицы и строит $attributes модели и, кстати, фильтры для валидации. И при fill() или save() отбирает для присваивания только те столбцы, что есть в таблице.
Или я что-то пропустил ?
Не в сети
Ты не поверишь, но PHP$attributes
появился уже после 3.0 (или при релизе оной), причём после скринкаста Shawn на эту тему. Насколько я знаю это единственный штатный способ в Laravel как-то ограничить запись в БД — более того, он и работает только для метода PHPfill()
, то есть ты запросто можешь сделать PHP$model->some_field = 'x';
и PHP$attributes
этой модели ничего не изменит.
Если для тебя важна эта «дырка», единственный вариант — наследовать модель и самому встроить туда подход Yii. Получится гибрид модели и схемы, Либо при принятии формы отсеивать лишние поля, если форма генерится из какого-то источника, где есть их список (для болших форм так обычно и бывает). Если форма маленькая, лучше использовать прямое присвоение атрибутов (PHP$model->some_field = 'x';
).
Думаю, такой подход был изначльно выбран в стиле общей идеологии Laravel — компактный каркас с лёгким ядром, где разработчик «знает, что делает» (даже если и делает то, что не знает). Хотя не исключаю, что в будущей версии Тейлор встроит какую-то валидацю.
Не в сети
Страницы 1