Laravel 5.5 中新增了 @auth
和 @guest
條件指令
我們在 Blade 模板中可以用以下指令針對 已登入與未登入用戶 作區分顯示
@auth
Welcome {{ user()->name }}!
@endauth
@guest
Welcome Guest!
@endguest
但是對於管理員用戶 ( 或訂閱用戶 ), 只能用類似以下的條件判斷
@if(auth()->check() && auth()->user()->isAdmin())
#authenticated and user is admin
@else
#normal user or not logged in
@endif
其中 isAdmin() 是 User Model 中的自定義方法, 後面會講到
只用一次還好, 如果頁面中多處需要判斷就會變得很不方便
在 welcome.blade.php
頁面加上
@admin
Welcome, Administrator {{ Auth::user()->name }}
@else
Welcome to Laravel
@endadmin
結果出錯, 那是因為 Blade 模板不能正確識別 @admin 這個條件指令
下面我們一步一步來自定義 Blade 模板條件指令
1. 創建登錄套件
命令行輸入:
php artisan make:auth
本例使用 Laravel 附帶的用戶驗證功能
2. 創建 Role Model 和遷移文件
php artisan make:model Role -m
3. users 表和 roles 表字段如下
#users表
Schema::create('users', function (Blueprint $table) {
$table->increments('uid');
$table->string('name')->unique();
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
#roles表
Schema::create('roles', function (Blueprint $table) {
$table->increments('role_id');
$table->integer('uid');
$table->string('roles');
$table->string('description');
$table->timestamps();
});
調整 User Model 和 Role Model 的 $primaryKey
屬性
#User Model
protected $primaryKey = 'uid';
#Role Model
protected $primaryKey = 'role_id';
生成數據表
php artisan migrate
調整 LoginController 和 RegisterController 的 $redirectTo
屬性為根目錄
protected $redirectTo = '/';
4. User Model 加入自定義方法 isAdmin( )
use Auth;
use App\Role;
public function isAdmin(){
if(Auth::user()){
$rs = Role::where('uid', Auth::user()->uid)->value('roles');
return $rs == 'admin' ? true : false;
}
}
5. 讓 Blade 模板識別自定義指令
打開
AppServiceProvider.php
, 加入以下內容:
use Illuminate\Support\Facades\Schema;
#當 MySQL 版本低於 5.7.7 時, 為能使其正確創建索引, 需要使用 Schema Facades將字段默認長度手動配置為191
public function boot()
{
\Blade::if('admin', function(){
return auth()->check() && auth()->user()->isAdmin();
});
Schema::defaultStringLength(191);
}
打開 welcome.blade.php
, 在 Laravel 字樣下面加入 @admin
指令組
<div class="content">
<div class="title m-b-md">
Laravel
</div>
@admin
Welcome, Administrator {{ Auth::user()->name }}
@else
Welcome to Laravel
@endadmin
</div>
6. 測試
註冊一個新用戶, 成功後會跳轉至歡迎頁面, 但卻不是我們想象中的結果
normal_user.png
那是因為, 我們的 roles
表仍然是空的, 剛剛註冊的這個用戶只是普通用戶
向 roles 表添加一條數據:
INSERT INTO roles (uid, roles, description) VALUES (1, 'admin', 'Administrator');
刷新
admin.png
至此, Laravel 5.5.22 自定義 Blade 模板條件指令全部完成
By RayC 2017-12-7
网友评论