Laravel登録リファクタリングの分析

不言
リリース: 2023-04-01 07:00:01
オリジナル
1204 人が閲覧しました

この記事では、Laravel の登録再構築の分析を主に紹介します。これは、特定の参考価値があります。必要な友人は、それを参照できるようにします。

背景コンテンツ 管理システムですが、Laravel のデフォルトのログイン登録では現在のニーズを満たすことができないため、Laravel の登録の再構築が必要です。 エディターに従って、登録の再構築を実行する方法を見てみましょう。

1. まずユーザー登録のルートを決定します。

laravel のインストール時にデフォルトで生成される登録と、いくつかのオプションがあります。は必須ではなく、一部のフォーム オプションを追加する必要がある場合もあります。

登録する場合、気軽に登録することはできません。一部のスーパー管理者のみが登録できます

最初に # を使用します。前回構成用に ##UserController を作成していない場合は、php Artisan make:controller UserController を使用してコントローラー クラス

# を作成し、2 つのルートを作成します。 ##Route::get('register', 'UserController@getRegister')

および Route::post('register', 'UserController@postRegister') <br>前者は、登録ページを表示する

get

リクエストと、その後にアカウントを登録する post リクエストです。

2. 登録アカウント ページを表示します。これは、

getRegister

メソッドを 1 つだけ表示する必要があります。このビューには特別なロジックはありません

public function getRegister()
{
 return view(&#39;auth.register&#39;);
}
ログイン後にコピー

3. アカウントの登録リクエストこの

postRegister

メソッドが使用されます
アカウントの登録はパスワードのリセットと同じであり、アカウントを登録するよりも簡単です。


ユーザー レコードをデータベースに挿入するときは、

User::create($data)

を使用して挿入できます。
#$data

は、各フィールドのキーと値を格納する配列です。

#

public function postRegister(Request $request)
{
 $rules = [
  &#39;username&#39;=>&#39;required|unique:finance_enewsuser&#39;,
  &#39;password&#39; => &#39;required|between:6,20|confirmed&#39;
 ];
 $messages = [
  &#39;required&#39;=>&#39;:attribute不能为空&#39;,
  &#39;unique&#39;=>&#39;用户名已被注册&#39;,
  &#39;between&#39; => &#39;密码必须是6~20位之间&#39;,
  &#39;confirmed&#39; => &#39;新密码和确认密码不匹配&#39;
 ];
 $username = $request->input(&#39;username&#39;);
 $password = $request->input(&#39;password&#39;);
 $group = $request->input(&#39;group&#39;);
 $data = $request->all();
 $validator = Validator::make($data, $rules, $messages);
 if ($validator->fails()) {
  return back()->withErrors($validator);
 }
 $data = [
  &#39;username&#39; => $username,
  &#39;password&#39; => bcrypt($password),
  &#39;groupid&#39; => $group,
  &#39;checked&#39; => 0,
  &#39;styleid&#39; => 1,
  &#39;filelevel&#39; => 0,
  &#39;loginnum&#39; => 0,
  &#39;lasttime&#39; => time(),
  &#39;lastip&#39; => &#39;127.0.0.1&#39;,
  &#39;truename&#39; => &#39;&#39;,
  &#39;email&#39; => &#39;&#39;,
  &#39;pretime&#39; => time(),
  &#39;preip&#39; => &#39;127.0.0.1&#39;,
 ];
 User::create($data); //插入一条新纪录,并返回保存后的模型实例
 //如果注册后还想立即登录的话,可以使用$user = User::create($data); Auth::login($user); 进行认证
 return redirect(&#39;/&#39;);
}
ログイン後にコピー

#4. 完成した例

##UserController

##
public function getRegister()
{
 return view(&#39;auth.register&#39;);
}

public function postRegister(Request $request)
{
 $rules = [
  'username'=>'required|unique:finance_enewsuser',
  'password' => 'required|between:6,20|confirmed'
 ];
 $messages = [
  'required'=>':attribute不能为空',
  'unique'=>'用户名已被注册',
  'between' => '密码必须是6~20位之间',
  'confirmed' => '新密码和确认密码不匹配'
 ];
 $username = $request->input('username');
 $password = $request->input('password');
 $group = $request->input('group');
 $data = $request->all();
 $validator = Validator::make($data, $rules, $messages);
 if ($validator->fails()) {
  return back()->withErrors($validator);
 }
 $data = [
    'username' => $username,
    'password' => bcrypt($password),
    'groupid' => $group,
    'checked' => 0,
    'styleid' => 1,
    'filelevel' => 0,
    'loginnum' => 0,
    'lasttime' => time(),
    'lastip' => '127.0.0.1',
    'truename' => '',
    'email' => '',
    'pretime' => time(),
    'preip' => '127.0.0.1',
   ];
 User::create($data); //插入一条新纪录,并返回保存后的模型实例
 return redirect('/');
}
ログイン後にコピー

register.blade

<form class="login-form" action="" method="post">
 {!! csrf_field() !!}
 <h3 class="font-green">Sign Up</h3>
 @if(count($errors) > 0)
  <p class="alert alert-danger display-hide" style="display: block;">
   <button class="close" data-close="alert"></button>
   <span> </span>
  </p>
 @endif
 <p class="form-group">
  <label class="control-label visible-ie8 visible-ie9">用户名</label>
  <input class="form-control placeholder-no-fix" type="text" autocomplete="off" placeholder="Username" name="username"> </p>
 <p class="form-group">
  <label class="control-label visible-ie8 visible-ie9">密码</label>
  <input class="form-control placeholder-no-fix" type="password" autocomplete="off" id="register_password" placeholder="Password" name="password"> </p>
 <p class="form-group">
  <label class="control-label visible-ie8 visible-ie9">重复密码</label>
  <input class="form-control placeholder-no-fix" type="password" autocomplete="off" placeholder="Repeat password" name="password_confirmation"> </p>
 <p class="form-group">
  <label class="control-label visible-ie8 visible-ie9">用户组</label>
  <select name="group" class="form-control">
    <option value="1"> 超级管理员 </option>
    <option value="2"> 管理员 </option>
    <option value="3"> 编辑 </option>
  </select>
 </p>
 <p class="form-actions">
  <button type="submit" id="register-submit-btn" class="btn btn-success uppercase pull-right">注册</button>
 </p>
</form>
ログイン後にコピー

5. ミドルウェア – ユーザーはログインする必要があります

今すぐ登録が完了したことをユーザーが判断するだけです。アカウントの登録は、スーパー管理者権限を持つアカウントのみで行う必要があります。 この場合、一般的な手順は、postRegister メソッドでユーザーの情報を直接検索し、ユーザーがこの権限を満たしているかどうかを確認し、満たしていない場合は他のページにジャンプします。

この方法は問題ありませんが、スーパー管理者と管理者の権限があるため、複数の場所で使用する必要があり、他の場所でも使用されます。

その後、誰かが
model

にメソッドを記述して、将来必要に応じて直接呼び出すことを考えるでしょう。


この方法も可能ですが、laravelが提供するミドルウェア機能が非常に強力で使いやすいのでおすすめです。次にミドルウェア機能を使ってみましょう。

私たちはバックエンドのコンテンツ管理システムであるため、最初にミドルウェアを作成します。機能としては、すべてのページにログインする前にログインする必要があります。ログインしないとログイン ページにジャンプします。

マニュアルを確認すると、
php Artisan make:middleware CheckLoginMiddleware

コマンドを使用してミドルウェアを作成できることがわかります。もちろん、同様のファイルをコピーし、同じ方法で変更します。 。


その後、

CheckLoginMiddleware ミドルウェア ファイルが app/Http/Middleware/
ディレクトリに作成され、その中に

handle()# が 1 つだけ含まれます。 ##方法として、

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;

class CheckLoginMiddleware
{
 public function handle($request, Closure $next)
 {
  //使用Auth方法,需要引入use Auth;方法
  //$request->is(&#39;login&#39;)表示请求的URL是否是登录页
  //因为我们打算使用全局的,所以,需要把登录页排除,不然会无限重定向
  //如果你的登录页不是/login,而是/auth/login的话,就写$request->is(&#39;auth/login&#39;)
  //并且我们要在请求处理后执行其任务,因为我们需要获取到用户的登录信息
  $response = $next($request);
  if (!Auth::check() && !$request->is(&#39;login&#39;)) {
   return redirect(&#39;/login&#39;);
  }
  return $response;
 }
}
ログイン後にコピー
内に関数を直接追加します。このミドルウェアの機能は、ルートが生成された場合、最初に Auth を使用することです。 : :check()

ユーザーがログインしているかどうかを確認します。ログインしていない場合は、ログイン ページにジャンプします。

メソッドは作成されましたが、まだ使用できません。このミドルウェアを登録し、そのミドルウェアが作成されて使用できること、および使用範囲をフレームワークに伝える必要があります。

このミドルウェアを登録するための Kernel.php
ファイルが

app/Http/

ディレクトリにあります。これにより、フレームワークにこのように記述されたことが通知されます。ミドルウェア。

Kernel.php ファイルには 2 つの配列属性があり、1 つの $middleware はグローバル使用を表し、もう 1 つは
$routeMiddleware

を表します オプションで使用できます。

グローバル使用とは、どのページをリクエストしても、このミドルウェアが最初に実行されることを意味します。 どの HTTP リクエストが必要か、ミドルウェアを実行する必要がある場所を示すために使用するものを選択します。

ここのすべてのページでログインが必要な場合は、グローバル ページを登録し、

$middleware

\App\Http\Middleware\CheckLoginMiddleware::class
ログイン後にコピー
## 配列属性に


を追加できます。

#登録すると使用可能になります

>注意:请记住,如果定义全局的要格外小心,比如上面我们要排除登录页,不然因为用户没有登录,所以在哪个页面都会重定向到登录页,当然也包括登陆页

6. 中间件–特殊页面需要验证用户组

现在是进行用户权限页面的限制,同样我们也要重新创建一个中间件

使用php artisan make:middleware CheckGroupMiddleware创建一个新的中间件,用来判断这个用户是否满足这个权限

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;

class CheckGroupMiddleware
{
 public function handle($request, Closure $next)
 {
  $user = Auth::user();
  if ($user->groupid != 1) {
   return redirect(&#39;/&#39;);
  }
  return $next($request);
 }
}
ログイン後にコピー

这里我们还是通过Auth::user()来获取到用户的信息,然后判断用户的组,不属于超级管理员就跳到首页。

然后我们在到app/Http/目录下有个Kernel.php文件是注册这个中间件的,这次我们注册为可以选择的中间件。

这个中间件因为是可以选择的,所以我们还需要给它起个别名,在$routeMiddleware数组属性里加如一条

&#39;user.group&#39; => \App\Http\Middleware\CheckGroupMiddleware::class
ログイン後にコピー

创建一个可以使用usergroup这个名字使用的中间件。

创建好后,我们可以选择在哪里使用,一个是在router.php的路由文件里加入,一个是在controller里使用

在router.php文件里使用

Route::get(&#39;/&#39;, [&#39;middleware&#39; => [&#39;user.group&#39;], function () {
 //
}]);
ログイン後にコピー

在控制器内使用

$this->middleware(&#39;user.group&#39;);
ログイン後にコピー

这里我们选择在路由里添加中间件。让注册页面只能是超级管理员才可以注册

Route::get(&#39;register&#39;, &#39;UserController@getRegister&#39;)->middleware(&#39;user.group&#39;);
Route::post(&#39;register&#39;, &#39;UserController@postRegister&#39;)->middleware(&#39;user.group&#39;);
ログイン後にコピー

我们目前只有两个路由要判断权限,所以使用了链式的写法,当然你也可以按照手册里上使用组的方式,组的方式更为优雅。

当然如果你的整个控制器内的方法都需要中间件进行验证过滤的话,你也可以创建组的形式,也可以直接在控制器内使用__construct方法,让每次请求这个控制器时,先执行中间件

class MyController extends Controller
{
 public function __construct()
 {
  $this->middleware(&#39;user.group&#39;);
 }

 public function index()
 {
  return view('my.index');
 }
}
ログイン後にコピー

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Larave如何实现短信注册

以上がLaravel登録リファクタリングの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!