zendraxl / laravel-request-null-user
Laravel从请求获取用户时的空对象模式
Requires
- php: >=7.1.0
- illuminate/support: ^5.7.15 || ^6.0.0
README
为Laravel框架提供从请求获取用户时的空对象模式。
安装
要从终端安装,请运行以下命令
composer require zendraxl/laravel-request-null-user
使用方法
由于user()
方法已经在\Illuminate\Http\Request
对象上,因此这个包提供了owner()
方法,因为请求的人是请求的所有者,这在逻辑上是合理的。
您可以使用以下任何一种
- 依赖注入请求对象
/** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index(\Illuminate\Http\Request $request) { $owner = $request->owner(); // ... }
- Laravel Facade请求对象
/** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $owner = \Illuminate\Support\Facades\Request::owner(); // ... }
- 全局
request()
函数
/** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $owner = request()->owner(); // ... }
由owner()
方法返回的对象是\Zendraxl\LaravelRequestNullUser\Owner
类的实例。它是一个简单的包装器/装饰器,因此不需要修改\App\User
类。
这允许在一定程度上保证\App\User
和\Zendraxl\LaravelRequestNullUser\NullUser
对象之间相同的API
,同时避免代码重复,并遵守DRY(不要重复自己)原则。
定义在\Zendraxl\LaravelRequestNullUser\Owner
对象上的唯一方法是isGuest()
方法。如果访问者未通过身份验证,则此方法将返回true
,如果访问者已通过身份验证,则返回false
。
默认值
默认情况下,\Zendraxl\LaravelRequestNullUser\NullUser
带有以下公共属性
public $email = 'guest@example.com'; public $name = 'Guest'; public $type = 'guest';
所有这些都可以直接通过\Zendraxl\LaravelRequestNullUser\Owner
对象访问
echo $owner->email; // guest@example.com echo $owner->name; // Guest echo $owner->type; // guest
可以通过定义以下环境变量来更改每个默认值
ZENDRAXL_NULL_USER_EMAIL=zendraxl@gmail.com
ZENDRAXL_NULL_USER_NAME=Drazen
ZENDRAXL_NULL_USER_TYPE=alien
扩展
由于使用了Illuminate\Support\Traits\Macroable
特性,因此可以通过Macros
扩展\Zendraxl\LaravelRequestNullUser\Owner
对象。
向\Zendraxl\LaravelRequestNullUser\Owner
添加isAdmin()
方法
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Zendraxl\LaravelRequestNullUser\Owner; class AppServiceProvider extends ServiceProvider { public function boot(): void { Owner::macro('isAdmin', function () { return $this->type === 'admin'; }); } }
还可以通过环境变量ZENDRAXL_USER_TYPES
添加其他isType()
方法到\Zendraxl\LaravelRequestNullUser\Owner
对象。通过添加逗号分隔的类型列表,所有内容都会动态生成。
如果数据库在\App\User
模型上具有admin
、manager
、supervisor
、pro user
、user
类型,并且已将其添加到.env
文件中
ZENDRAXL_USER_TYPES=admin,manager,supervisor,pro user,user
则将在\Zendraxl\LaravelRequestNullUser\Owner
对象上添加以下方法
$owner->isAdmin(); $owner->isManager(); $owner->isSupervisor(); $owner->isProUser(); $owner->isUser();
如果\App\User
模型上的属性不是type
而是类似role
,则可以通过环境变量覆盖它
ZENDRAXL_TYPE_PROPERTY=role