weblebby / framework
Laravel 管理面板。
v0.0.2
2024-03-09 16:24 UTC
Requires
- php: ^8.1
- ext-fileinfo: *
- ext-intl: *
- astrotomic/laravel-translatable: ^11.10
- feadbox/laravel-seo: ^2.0
- genealabs/laravel-model-caching: ^0.13.8
- laravel/fortify: ^1.10
- propaganistas/laravel-phone: ^5.1
- spatie/laravel-medialibrary: ^10.0
- spatie/laravel-permission: ^5.5
- spatie/laravel-sluggable: ^3.3
- symfony/html-sanitizer: ^7.0
- symfony/intl: ^6.1
Requires (Dev)
- laravel/framework: ^10.34
- laravel/pint: ^1.13
- weblebby/core: ^1.0
README

重要说明
Weblebby 框架需要 PHP 8.2+ 和 Laravel 10+。
此外,此框架添加到现有项目中时可能无法正常工作。建议用于新项目。
安装
composer require weblebby/framework
在将 Weblebby 框架包含到您的库中后,还有一些其他事情要做。让我们一步一步看看应该做什么。
用法
AppServiceProvider
首先,让我们在服务提供器中创建一个新的面板。 我们可以使用 AppServiceProvider 来实现。
use App\Http\Middleware\AdminPanel; use Weblebby\Framework\Facades\Panel; use Weblebby\Framework\Support\Features;
/** * Create a new panel named "admin". */ Panel::create('admin') ->prefix('admin') ->as('admin::') ->middleware(AdminPanel::class) // We will create this middleware later. ->features([ /** * You can delete the features you want. */ Features::users(), Features::roles(), Features::registration(), Features::preferences(), Features::navigations(), Features::extensions(), Features::themes(), Features::appearance(), Features::setup(), ]); /** * Set as main panel. */ Panel::setMainPanel('admin');
用户模型
在用户模型中,我们应使用 Weblebby 框架提供的类,而不是使用默认的 Authenticatable 类。
<?php // app/Models/User.php // remove - use Illuminate\Foundation\Auth\User as Authenticatable; // add + use Weblebby\Framework\Models\User as Authenticatable;
进行此更改后,我们需要在用户模型中包含 authorizedPanels()
方法以处理访问管理。
public function authorizedPanels(): array|bool { if ($this->hasRole('Super Admin')) { // Grant access to all panels. return true; } if ($this->hasRole('Reseller')) { // Grant access to specific panels. return ['reseller']; } // Deny all access. return false; }
创建中间件
我们必须为每个面板创建一个中间件。让我们为 "admin" 面板创建一个。
php artisan make:middleware AdminPanel
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; use Weblebby\Framework\Facades\Panel; use Weblebby\Framework\Items\MenuItem; use Weblebby\Framework\Support\Features; class AdminPanel { /** * Handle an incoming request. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { /** * We must set "admin" panel as current. */ Panel::setCurrentPanel('admin'); /** * Initialize menu for "admin" panel. */ panel()->menu('sidebar') ->withCategory('general') ->addMany([ MenuItem::create(__('Users')) ->withUrl(route('admin::users.index')) ->withActive($request->routeIs('admin::users.*')) ->withIcon('people') ->withAbility([panel()->supports(Features::users()), 'user:read']), MenuItem::create(__('Preferences')) ->withUrl(route('admin::preferences.index')) ->withActive($request->routeIs('admin::preferences.*')) ->withIcon('sliders') ->withAbility([ panel()->supports(Features::preferences()), fn () => auth()->user()->getAllPermissions() ->pluck('name') ->intersect(panel()->preference('default')->toPermissions()) ->isNotEmpty(), ]), ]); /** * You can create menu items for custom categories. */ panel()->menu('sidebar') ->withCategory('content', __('Content')) ->addMany([ MenuItem::create(__('Cars')) ->withUrl(route('admin::preferences.index')) ->withActive($request->routeIs('admin::cars.*')) ->withIcon('people') ->withAbility('car:read'), ]); /** * Set preference sections for "admin" panel. * * We will set the fields of these bags within a service provider later. */ panel() ->preference('default') ->withBag('general', __('General settings')) ->withBag('email', __('Email settings')); /** * Set default permissions for "Role Permissions" page. */ panel()->permission()->defaults( navigations: true, users: true, extensions: true, appearance: true, preferences: true, roles: true, ); /** * You can create custom permissions. */ panel()->permission() ->withGroup('car') ->withTitle(__('Cars')) ->withPermissions([ 'create' => __('Can create cars'), 'read' => __('Can view cars'), 'update' => __('Can edit cars'), 'delete' => __('Can delete cars'), ]); return $next($request); } }
路由
我们必须在 RouteServiceProvider.php 中包含路由助手。
use Weblebby\Framework\Facades\Panel; $this->routes(function () { Panel::useRoutes(); Panel::useFortifyRoutes(); // ... });
偏好设置
偏好设置的工作方式类似于 Laravel 中的 config(...)
方法。但是,您可以从管理面板更新偏好设置,并在需要的位置使用 preference(...)
方法调用它们。
为了通过面板管理偏好设置,您必须首先定义您想要的字段。让我们做一个例子。
<?php namespace App\Providers; use Weblebby\Framework\Facades\Preference; use Weblebby\Framework\Items\Field\FieldItem; class AppServiceProvider extends ServiceProvider { /** * Register any application services. */ public function register(): void { // ... } /** * Bootstrap any application services. */ public function boot(): void { Preference::create('default', 'general')->addMany([ FieldItem::text('site_name') ->label(__('Site name')) ->hint(__('Enter your site name.')) ->rules(['required', 'string', 'max:191']), FieldItem::text('site_url') ->label(__('Site URL')) ->rules(['required', 'string', 'url', 'max:191']), /** * For select field items, the `in` rule is automatically created using the options available. * You can also include required or nullable rules if needed. */ FieldItem::select('ssl') ->label(__('SSL')) ->options([ 'yes' => __('Yes!'), 'no' => __('No'), ]), FieldItem::image('site_logo') ->label(__('Site Logo')) ->rules(['nullable', 'image', 'max:2048']), ]); } }
身份验证中间件
为了避免异常,将 route('login')
更改为 route('admin::login')
在 app/Http/Middleware/Authenticate.php
中。
安装命令
最后,我们运行 weblebby:install
来配置数据库并创建管理员用户。
php artisan weblebby:install