我正在创建一个表单, 以便向网站提交请求。在此窗体中, 用户将填写窗体 subject
description
, 以及其他一些字段, 一旦用户单击 Submit
按钮, 窗体验证将在后台工作, 并应调用以下操作。
请注意:我还在考虑检查验证, 因此, 如果验证在用户登录过程中失败, 注册, 然后不要丢失表单请求数据。
我心里有以下想法。
RequestController
, 然后创建不同的方法 dataCollectStep
checkLoginRegisterStep
registeringStep
, loginStep
所以首先调用 dataCollectStep
的第一个调用, 并在方法检查用户是否登录, 然后提交表单与用户登录 id。session
中, 并调用下一个方法 checkLoginRegisterStep
。loginStep
调用用户并验证登录, 如果登录成功, 则从会话中获取所有值并提交该窗体。但这个想法看起来并不好, 因为我必须创建重复的代码 login
registering
作为和。会话管理也看起来很困难, 如果窗体更大, 那么我们需要一个接一个地销毁会话, 因为销毁所有会话可能会导致登录用户的问题。
那么, 有什么好办法吗?
我检查了你的概念, 真的很好。我有检查以下的事情在我自己的项目, 然后我给你一个完整的解决方案。
如果你按照我所有的步骤, 那么它一定会解决你的问题。
首先, 拉拉维尔有内置的认证系统, 太好了。你应该用那个。
在终端中运行此命令
php artisan make:auth
此命令将在 laravel 中创建登录名和注册。您也可以通过搜索自定义它。
此命令将在控制器中创建 auth 控制器
这也在资源/视图中创建 html
此命令还在数据库/迁移中创建数据库表。您可以运行 php artisan migrate
在数据库中添加迁移。
多页控制器. php
use Session;
class MultipageController extends Controller
{
public function store(Request $request){
$input = $request->all();
//First we need to check if the user is logged in then attached the user id with the form and submit that form.
if (Auth::check()) {
$user_id = Auth::user()->id;
$input['user_id'] = $user_id;
}else{
// If user is not logged in ask for the login or the signup in the next page
Session::put('filled_form', $input);
return redirect()->route('login');
}
//Your save code
// Destroy form session here
Session::forget('filled_form');
}
}
作者/logincontrol. php
在登录控制器中添加以下方法, 即使在注销后, 该方法也能使会话数据保持活动状态。
use Session;
use Illuminate\Http\Request;
public function logout(Request $request)
{
$this->guard()->logout();
return redirect('/');
}
作者/logincontrol. php
在登录控制器中添加以下方法, 该方法将您重定向到窗体 url (如果它有会话数据) 您还需要通过进入每个输入来打印表单 Session::get('filled_form')
数据。
protected function authenticated(Request $request, $user)
{
if ( Session::get('filled_form') ) {// do your margic here
return redirect('form-url');
}
/* If not form filled then redirect where you want */
return redirect('/homepage');
}
form.blade.php
将数据输入表单并将其打印到窗体中
作为检查用户是否登录的最佳方法, 在允许用户执行特定操作之后, 您可以通过 auth
Laravel 提供的方式进行检查。
你只需要跑
php artisan make:auth
它将创建所需的控制器和视图文件。
并使用 auth
中间件, 不允许用户在没有登录的情况下提交表单。
希望这对:)
首先, 我们不打算编写您的代码。
至于最好的方法。如果您希望控制器在受保护的使用中间件中登录, 在这种情况下, 请使用 auth 中间件。
如果有人没有将他们重定向到登录页, 这将检查他们是否登录。 至于身份控制器类型
php artisan make:auth
这将设置基本的身份验证需要, 一个注册控制器登录控制器和所有的视图。
如果要将首次将请求闪存到会话中的值存储。
希望这有所帮助!
一开始你可以跑 php artisan make:auth
。之后, 您可以在路由中使用中间件身份 Route::group(['middleware' => ['web', 'auth']], function () { other routes here
验证。
此外, 您还可以在构建控制器时使用中间件, 如下所示public function __construct() { $this->middleware('auth'); }
您可以使用当前用户 id Auth::id()
; 注册后, 拉维尔将用户转接到登录页面