laravel强制用户添加其他用户信息

时间:2015-04-18 18:12:08

标签: php laravel laravel-5

我是Laravel的新手,我正在制作一个小型测试应用程序。 但现在我陷入了以下问题。

用户登录该应用程序后,我希望他/她能够看到他/她必须填写有关他/她自己的更多信息的表单,然后才能继续。

我的问题是我不知道在哪里放置代码,我尝试将它放在Controller.php中,但它似乎不起作用(它确实只在主页上但不在配置文件页面上),我也尝试将它放在AppServiceProvider.php中,因为我的主菜单总是从数据库中收集一些数据,但这似乎也没有用。

有没有人知道在哪里放置以下代码?

if (\Request::path() !== 'info' && (\Auth::User()->firstname === NULL || \Auth::User()->lastname === NULL)
{
   return \Redirect::to('info');
}

信息页面将是用户将看到附加信息表单的页面。

2 个答案:

答案 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);
}

之后,您可以使用不同的方式来使用中间件:

  1. App\Http\Middleware\AccountInfoMiddleware添加到$middleware中的app/Http/Kernel.php数组中。这意味着中间件将针对每个请求运行。
  2. 将同名的名称添加到$routeMiddleware中的Kernel.php,并将其用于特定路线或从控制器启用。有关详细信息,请访问Laravel documentation