Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Допустим у нас есть контроллер ArticleController и его метод create который соответственно будет создавать новую статью. Предположим у нас уже есть какая-то примитивная форма в которой будут заполняться поля этой статьи (кстати в каком они должны быть формате?). Как передать в этот метод данные формы? Сорьте за нубский вопрос, но я не смог найти этого в доках.
P.S. Предвидя что будет что-то вроде Request::get('Article') для получения массива полей переданных из формы спрошу - а нельзя ли задать вот так?
public function create(Article $article) {}
Так было бы удобнее... Чтобы фреймворк самостоятельно смаппил массив из запроса в модель.
Изменено Dahotta (16.05.2018 11:45:00)
Не в сети
Новую статью создает метод store. Данные содержатся в переменой $request
Не в сети
Новую статью создает метод store. Данные содержатся в переменой $request
Вообще не ответ. Я не это спрашивал.
Не в сети
Зачем это делать? Чтобы не писать
public function store(Request $request, Article $article)
{
$article->fill($request->input());
?
Изменено maximilianno (16.05.2018 16:16:28)
Не в сети
Зачем это делать? Чтобы не писать$article->fill($request->input());?
Да. Меньше кода.
Но для начала покажите мне дефолтный способ - вот то что вы сейчас написали, но полностью. Т.е. откуда берутся переменные $article и $request? Можете привести примерный код метода создания статьи?
Не в сети
Отредактировал выше. И правильно сказали create() - отображать должен форму, а store(Request $request) сохранять данные. И введенные данные нужно проверять и корректировать, поэтому так не нужно делать, это усложнение.
Изменено maximilianno (16.05.2018 16:13:53)
Не в сети
public function store(Request $request, Article $article)
{
$article->fill($request->input());
Серьезно? Т.е. это то что я и спрашивал? А что тогда в переменной $article изначально? Она пустая? Типа как $article = new Article()? Почему ее фреймворк тогда сам не заполняет перед вызовом?
Отредактировал выше. И правильно сказали create() - отображать должен форму, а store() сохранять данные. И введенные данные нужно проверять и корректировать, поэтому так не нужно делать, это усложнение.
Хмм, спорно, но возможно... Я просто сижу на Yii2, где такой метод обычно делается примерно так:
public function actionCreate() {
$article = new Article();
if ($article->load(Yii::$app->requst->post()) and $article->validate()) {
$article->save();
return $this->goHome();
}
return $this->render('create', ['model' => $article]);
}
Причем стыдно признаваться, но иногда я еще и мешаю create и update в один метод. Выглядит это все конечно паршиво.Вот поэтому и есть большое желание перейти на laravel. Но сначала хочу понять что тут к чему...
Кстати если у вас два метода: create - который как я понял нужен чтобы отрисовывать вьюху и store который уже принимает post запрос с данными, то где у вас будет валидация? Вон например в yii (пример выше) если модель не прошла валидацию то в ней будут указаны ошибки и при рендере они выведутся. А как у вас тут это устроено?
Изменено Dahotta (16.05.2018 16:28:00)
Не в сети
Валидация в своем, допустим, ArticleRequest наследнике обычного Request, тогда в store(ArticleRequest $request) будет, а модель автоматом заполняется только в некоторых случаях, когда данные из базы берутся, типа отображение страницы с редактируемой статьей.
Не в сети
Валидация в своем, допустим, ArticleRequest наследнике обычного Request, тогда в store(ArticleRequest $request) будет
Вы это серьезно? Для валидации модели нужен отдельный класс? Тьфу... У меня сейчас так резко уменьшилось желание переходить на этот фреймворк. Я конечно за SOLID, но реально ведь почти во всех фреймворках на всех языках валидация модели вешается на тот же класс (причем самое удобное делать это аннотациями как в Java или C#). Разве что иногда делается разделение на dao модель и модель для вьюх. Или вы это и имели ввиду?
Не в сети
Валидация через класс реквеста в бест практис, а так можно как хочешь валидировать, способов много
Изменено maximilianno (16.05.2018 17:01:40)
Не в сети
Страницы 1