zendraxl/laravel-request-null-user

Laravel从请求获取用户时的空对象模式

1.0.8 2019-10-31 12:30 UTC

This package is auto-updated.

Last update: 2024-09-29 05:49:24 UTC


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模型上具有adminmanagersupervisorpro useruser类型,并且已将其添加到.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