我是Laravel的新手,我正在制作一个小型测试应用程序。 但现在我陷入了以下问题。
用户登录该应用程序后,我希望他/她能够看到他/她必须填写有关他/她自己的更多信息的表单,然后才能继续。
我的问题是我不知道在哪里放置代码,我尝试将它放在Controller.php中,但它似乎不起作用(它确实只在主页上但不在配置文件页面上),我也尝试将它放在AppServiceProvider.php中,因为我的主菜单总是从数据库中收集一些数据,但这似乎也没有用。
有没有人知道在哪里放置以下代码?
if (\Request::path() !== 'info' && (\Auth::User()->firstname === NULL || \Auth::User()->lastname === NULL)
{
return \Redirect::to('info');
}
信息页面将是用户将看到附加信息表单的页面。
答案 0 :(得分:2)
如果您想要在用户没有名字和姓氏时重定向用户,则可以使用中间件来解决您的问题。将代码放在中间件文件中。
创建中间件文件
namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Routing\Middleware;
class UserMiddleware implements Middleware {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (\Request::path() !== 'info' && (\Auth::User()->firstname === NULL || \Auth::User()->lastname === NULL)
{
return \Redirect::to('info');
}
return $next($request);
}
}
在app / Http / Kernel.php中为路由注册中间件
/**
* The application's global HTTP middleware stack.
*
* @var array
*/
/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
'user' => 'App\Http\Middleware\UserMiddleware' // Register this new middleware
];
将中间件用于您想要的路线
Route::get('/', [
'middleware' => 'user',
'uses' => 'ExampleController@index'
]);
为路由添加中间件后,将运行中间件文件中的每个请求,handle()函数来检查用户是否具有名字或姓氏。如果用户没有,它将重定向到info,如果用户拥有所有信息,它将处理下一个请求。
答案 1 :(得分:1)
我认为你应该为此创建一个middleware。
首先运行php artisan make:middleware AccountInfoMiddleware
以创建所需的文件。
然后打开app/Http/Middleware/AccountInfoMiddleware.php
并将您的代码添加到handle()
方法:
public function handle($request, Closure $next)
{
$user = \Auth::user();
if($request->path() !== 'info' && $user && ($user->firstname === NULL || $user->lastname === NULL)
{
return redirect('info');
}
return $next($request);
}
之后,您可以使用不同的方式来使用中间件:
App\Http\Middleware\AccountInfoMiddleware
添加到$middleware
中的app/Http/Kernel.php
数组中。这意味着中间件将针对每个请求运行。$routeMiddleware
中的Kernel.php
,并将其用于特定路线或从控制器启用。有关详细信息,请访问Laravel documentation