2015-05-18 2 views
0

Я только начинаю изучать Laravel 5, и я хочу знать, как правильно обращаться с представленными формами. Я нашел много учебников, в которых мы создаем два отдельных действия, в которых первая форма визуализации, а вторая - собственно форма обработки. Я пришел из Symfony2, где мы создаем одно действие для обоих, обрабатываем и обрабатываем представленную форму, поэтому я хочу знать, что мне нужно создать два отдельных действия, потому что это Laravel-way, или я могу поместить всю логику в одно действие, я сделать это, как на следующие, но я не как код, что я получаю:Обращение с формой ручек Laravel 5

public function create(Request $request) 
{ 
    if (Input::get('title') !== null) { 
     $v = Validator::make($request->all(), [ 
      'title' => 'required|unique:posts', 
      'content' => 'required', 
     ]); 
     if ($v->fails()) { 
      return redirect()->back()->withErrors($v->errors()); 
     } 
     $post = new Post(Input::all()); 
     if ($post->save()) { 
      return redirect('posts'); 
     } 
    } 

    return view('add_post'); 
} 

Так может кто-нибудь дать мне совет, как мне нужно сделать это правильно? Благодаря!

ответ

3

Одна из самых важных причин для создания двух действий заключается в том, чтобы избежать дублированных форм заявок. Вы можете узнать больше о Post/Redirect/Get pattern.

Еще одна важная причина заключается в том, как сохранить код чище. Взгляните на эту первую смену:

public function showForm(){ 
    return view('add_post'); 
} 

public function create(Request $request) 
{ 
    $v = Validator::make($request->all(), [ 
      'title' => 'required|unique:posts', 
      'content' => 'required', 
     ]); 
     if ($v->fails()) { 
      return redirect()->back()->withErrors($v->errors()); 
     } 
     $post = new Post(Input::all()); 
     if ($post->save()) { 
      return redirect('posts'); 
     } 
    return redirect()->route('show_form')->withMessage(); 
} 

Первое, что вы можете заметить, что create() функция не делает любой вид, он используется для управления логикой создания (как и само название говорит). Это нормально, если вы планируете оставаться в низком профиле, но что происходит, когда вам нужно добавить некоторые другие проверки или даже лучше, повторно используйте код в других контроллерах. Например, ваша форма является справочным инструментом для публикации комментария, и вы хотите разрешить только пользователям, зарегистрированным в «авторами». Это соображение может помочь более легко разделить код на конкретные действия, вместо этого сделать спагетти if-if-if-if. Опять же ...

public function showForm(){ 
    return view('add_post'); 
} 

public function create(PublishPostRequest $request) 
{ 
    $post = new Post($request->all()); 
    $post->save() 
    return redirect('posts'); 
} 

Посмотрите, как PublishPostRequest запрос происходит в присвоенной функции. Наконец, для того, чтобы получить лучшее из Laravel 5 вы можете создать класс запроса, чтобы сохранить весь код, связанный с проверкой и авторизации в нем:

class PublishPostRequest extends Request{ 

    public function rules(){ 
     return [ 
      'title' => 'required|unique:posts', 
      'content' => 'required', 
     ] 
    } 

    public function authorize(){ 
     $allowedToPost = \Auth::user()->isAuthor(); 

     // if the user is not an author he can't post 
     return $allowedToPost;  

    } 
} 

Одна хорошая вещь о пользовательских класса запрос класса является то, что когда-то впрыскивается в контроллере через функциональный параметр, он запускается автоматически, поэтому вам не нужно беспокоиться о $v->fails()

Смежные вопросы