Отправка формы перехвачена промежуточным ПО auth в laravel 5 - PullRequest
0 голосов
/ 11 ноября 2018

Я работал над проектом блога laravel 5.7. Я хочу прокомментировать статью.

Мне нужно добиться этого:

  • Прежде чем войти в систему, я могу напечатать что-нибудь в комментарии textarea
  • Я отправляю комментарий (конечно, он будет перехвачен промежуточным программным обеспечением auth)
  • тогда я перенаправлен на страницу входа
  • После входа в систему я надеюсь, что мое приложение сможет автоматически отправлять данные предыдущей формы (или комментарий) вместо того, чтобы снова вводить тот же комментарий
  • Я думаю, что сегодня это очень распространенная бизнес-логика на многих веб-сайтах, но как мне этого добиться?

Контроллер моих комментариев здесь:

public function __construct()
{
    $this->middleware('auth');
}

public function store(Post $post) {
    $comment = Comment::create([
        'body' => session('comment')?:request('body'),
        'post_id'  => $post->id,
        'user_id' => auth()->user()->id 
    //before logging in, you don't have an user_id yet.
    ]);        
    return back()->with('success', 'Add comment succeeded');
}

web.php Маршрут здесь:

Route::post('/posts/{post}/comments', 'CommentsController@store')->name('addComment');

В основном промежуточное программное обеспечение аутентификации перехватило отправку данных формы, я хочу просмотреть промежуточное программное обеспечение аутентификации с данными формы. Не потерял их после входа в систему.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вот решение. Небольшая хитрость. Сначала сохраните комментарий к сеансу, прежде чем перейти к промежуточному программному обеспечению auth. После входа в систему ПОЛУЧИТЕ этот маршрут для создания комментария. Маршрут:

Route::get('/posts/{post}/comments', 'CommentsController@store')->name('addComment');
Route::post('/posts/{post}/comments', 'CommentsController@commentSave');

Контролер комментариев:

public function __construct()
{
    $this->middleware('auth', ['except' => ['commentSave']]);
}
public function commentSave(Request $request){
    $url = \URL::previous();
    session(['comment' => $request->input('body')]);
    return redirect("$url/comments");
}  

public function store(Post $post){
    if(session('comment')){
        $comment = Comment::create([
            'body' => session('comment'),
            'post_id'  => $post->id,
            'user_id' => auth()->user()->id
        ]);
        session(['comment' => null]);
        return redirect("posts/$post->id")->with('success', 'Add comment succeeded');
    }
    return redirect("posts/$post->id");         
}
0 голосов
/ 11 ноября 2018

Я думаю, что решение вашей проблемы здесь: https://laravel.com/docs/5.7/session#storing-data

...