robertboes/laravel-portal

Laravel Portal - 简单创建服务于访客和认证用户的单一路由

dev-master 2019-07-18 14:12 UTC

This package is auto-updated.

Last update: 2024-09-19 01:44:51 UTC


README

Portal Header

Latest Version on Packagist Build Status Quality Score Total Downloads

简单创建服务于访客和认证用户的单一路由。

为什么选择这个包?

想象一下你希望访客和用户都能看到的路由/页面。通常你将创建一个路由,例如 Route::get('/', AppController::class),在这个控制器中,你会检查用户是否已认证。你的控制器可能看起来像这样

<?php

class AppController {
    public function __invoke()
    {
        if (Auth::check()) {
            return $this->dashboard();
        }
        
        return $this->guestPage();
    }
    
    public function guestPage()
    {
        $flights = \App\Flight::where('active', 1)
            ->orderBy('date', 'desc')
            ->take(10)
            ->get();
            
        return view('pages/guest/index', [
            'flights' => $flights,        
        ]);
    }
    
    protected function dashboard()
    {
        $flights = Auth::user()->flights->where('active', 1)
            ->orderBy('data', 'desc')
            ->take(5)
            ->get();
        
        return view('pages/auth/index', [
            'flights' => $flights,
        ]);
    }
}

这是一个非常基础的例子,但在这里,当用户认证或不认证时,你将返回不同的视图+数据。Laravel Portal 是为了消除认证检查并将此从控制器中分离出来而创建的。你的控制器(或方法)可以专注于它们需要执行的任务。这是通过添加一个中间件并根据认证来切换预期操作来实现的。

安装

你可以通过 composer 安装此包

composer require robertboes/laravel-portal

用法

使用配置

在配置中定义你的 "route_actions"。数组索引对应于你的 "路由名称",应该包含至少一个访客操作和一个认证操作。这些只是将到控制器方法的映射。一个例子如下

'route_actions' => [
    'app' => [
        'guard' => 'web',
        'guest' => \App\Controllers\HomeController::class . '@__invoke',
        'auth'  => \App\Controllers\DashboardController::class . '@__invoke',
    ],
    'ajax.stats' -> [
        'guest' => 'App\Controllers\StatsController@global', 
        'auth'  => 'App\Controllers\StatsController@user',
    ],
],

然后你可以在你的路由文件中引用此配置。你只需传递路径(URL)和路由操作,例如 "ajax.stats"

Route::portal('/', 'app');
Route::group(['middleware' => ['ajax']], function () {
    Route::portal('/ajax/stats', 'ajax.stats');
});

访问该路由 your-laravel.app/ 的用户将自动看到正确的版本。访客用户将只能看到公开页面,登录用户将看到他们的仪表板。这适用于任何路由,JSON 路由,并且与任何守卫都兼容。

测试

composer test

变更日志

请参阅 变更日志 了解最近更改的更多信息。

贡献

请参阅 贡献指南 了解详情。

鸣谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件

Laravel 包模板

此包是使用 Laravel 包模板 生成的。