afrittella / back-project
基于 Laravel 的另一个管理面板。受 Backpack 启发。
Requires
- php: ~5.6|~7.0
- almasaeed2010/adminlte: ^2.3
- caouecs/laravel-lang: ~3.0
- doctrine/dbal: ^2.5
- illuminate/database: ^5.4
- illuminate/support: ^5.4
- intervention/image: ^2.3
- intervention/imagecache: ^2.3
- kalnoy/nestedset: ^4.2
- laravel/framework: ^5.4
- laravel/socialite: ^3.0
- laravelcollective/html: ^5.4
- laravolt/avatar: ^1.8
- pendonl/laravel-fontawesome: ^1.0
- prologue/alerts: 0.4.*
- spatie/laravel-permission: ^1.7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^1.11
- fzaninotto/faker: ~1.4
- mockery/mockery: 0.9.*
- orchestra/database: *
- orchestra/testbench: ^3.4
- phpunit/phpunit: ~5.7
README
警告。此存储库未积极维护。可能不兼容 Laravel 的最新版本。
Back Project 1.3.7
Back Project 是一个基于 Laravel 5.4+ 的管理面板,基于 AdminLTE 和其他出色的包。有关详细信息,请参阅 致谢。
请参阅 CHANGELOG.md 以获取详细的更新信息。
功能
- AdminLTE 模板
- 易于使用的面板、按钮、链接、图标等 Html 组件和助手
- 基于 spatie/laravel-permission 的简单授权管理
- 菜单管理
- 媒体管理器:您可以作为后端用户上传媒体,也可以作为管理员管理其他用户上传的所有媒体(请参阅 媒体管理器)
- 社交登录
安装
composer require afrittella/back-project
将服务提供者添加到您的 config.app 服务提供者列表中
Afrittella\BackProject\BackProjectServiceProvider::class,
发布配置、资产、视图、迁移
配置
php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="config"
php artisan vendor:publish --provider="Prologue\Alerts\AlertsServiceProvider"
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"
在 config/laravel-permission.php 中更改模型类为
'permission' => Afrittella\BackProject\Models\Permission::class, 'role' => Afrittella\BackProject\Models\Role::class,
社交登录默认禁用。要使用它,您必须遵循以下步骤
-
更改 config/back-project.php 中的以下行
'social_login_enabled' => [ 'facebook' => true, // enable facebook login 'twitter' => true, // enable twitter login 'linkedin' => true // enable linkedin login ],
-
一旦获得应用程序密钥,请将它们添加到 .env 和 config/services.php 中,如下所示。
.env
FACEBOOK_ID = XXXXXXXX FACEBOOK_SECRET = XXXXX FACEBOOK_REDIRECT = http://example.com/auth/facebook/callback TWITTER_ID = XXXXXXXX TWITTER_SECRET = XXXXX TWITTER_REDIRECT = http://example.com/auth/twitter/callback LINKEDIN_ID = XXXXXXXX LINKEDIN_SECRET = XXXXX LINKEDIN_REDIRECT = http://example.com/auth/linkedin/callback
config/service.php
... 'facebook' => [ 'client_id' => env('FACEBOOK_ID'), 'client_secret' => env('FACEBOOK_SECRET'), 'redirect' => env('FACEBOOK_REDIRECT'), ], 'twitter' => [ 'client_id' => env('TWITTER_ID'), 'client_secret' => env('TWITTER_SECRET'), 'redirect' => env('TWITTER_REDIRECT'), ], 'linkedin' => [ 'client_id' => env('LINKEDIN_ID'), 'client_secret' => env('LINKEDIN_SECRET'), 'redirect' => env('LINKEDIN_REDIRECT'), ]
语言
目前只支持意大利语和英语。
运行
php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="lang"
请注意:如果您不想更改默认字符串,则不需要发布翻译文件。
默认 Laravel 语言由 caousecs/laravel-lang 包提供。您必须手动根据项目将要使用的语言复制翻译文件。
将 vendor/caouecs/laravel-lang/src/[language-folder] 的内容复制到 resources/lang/[language-folder]
BackProject、AdminLTE、头像资产和视图
php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="adminlte"
php artisan vendor:publish --provider="Laravolt\Avatar\ServiceProvider"
php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="public"
php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="errors"
如果您想编辑它们,可以发布 Back Project 默认视图
php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="views"
迁移
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
运行
php artisan migrate
php artisan back-project:seed-permissions
php artisan back-project:seed-menus
配置
队列
可以使用队列发送注册邮件。
设置队列
- 更改 .env 文件。设置
QUEUE_DRIVER=database
- 更改 config/back-project.php 行:
"use_queue" => true,
- 运行
php artisan queue:table
以创建作业表 - 运行
php artisan queue:failed-table
- 如 Laravel 文档中所述配置队列工作者 Laravel documentation
默认情况下,Back Project 使用经典的通知系统。
授权
BackProject 提供了 3 个自定义中间件,其中一个替换了“RedirectIfAuthenticated”。如果您想使用此中间件(它将认证的用户重定向到 admin/dashboard),则应将 app/Http/Middleware/Kernel.php 中的 “guest” 别名替换为 Back Project 的自定义一个,并按以下方式添加其他两个
'guest' => \Afrittella\BackProject\Http\Middleware\RedirectIfAuthenticated::class,
'admin' => \Afrittella\BackProject\Http\Middleware\Admin::class,
'role' => \Afrittella\BackProject\Http\Middleware\Role::class,
用户模型
该软件包提供了一个默认的用户模型。它具备所有使后置投影正常工作的功能。如果您想使用自己的自定义模型,只需扩展
Afrittella\BackProject\Models\Auth\User;
如果您正在使用软件包模型,或者您的用户模型不在默认文件夹中,您必须修改config/auth.php
... 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => Afrittella\BackProject\Models\Auth\User::class, ], ...
如果您想使用自己的自定义用户模型,请记住在config/back-project.php中更改user_model键。
后置项目简单认证方法
后置项目有一个简单的授权方法,位于Afrittella/BackProject/Http/Controllers/Controller.php
public function bCAuthorize($ability, $record = []) { if ($record->user_id !== Auth::user()->id) { abort(403); } }
如果您只想简单地检查用户是否有权管理记录,可以使用这个控制器代替Laravel默认控制器,并在执行任何数据库操作之前调用“bCAuthorize”。
异常
后置项目有一个默认的异常处理器,用于渲染自定义错误视图。要使用此处理器,请将以下行添加到Exceptions/Handler.php
... use Afrittella\BackProject\Exceptions\BackProjectHandler; use Afrittella\BackProject\Exceptions\BaseException; class Handler extends ExceptionHandler { ... public function render($request, Exception $exception) { ... if ($exception instanceof BaseException) { if ($response = BackProjectHandler::getResponse($exception)) { return $response; } } ... return parent::render($request, $exception); } }
开始吧
完成安装和配置部分后,前往您项目的URL(www.example.com/register),注册并激活第一个用户,他将成为网站管理员。
媒体管理器
后置项目使用intervention/image和intervention/imagecache来管理图像上传、调整大小和显示。上传后,可以使用imagecache软件包以及默认或自定义过滤器显示图像。请随意为您自己的图像创建自定义过滤器。
按照以下示例更改config/imagecache.php
return array( /* |-------------------------------------------------------------------------- | Name of route |-------------------------------------------------------------------------- | | Enter the routes name to enable dynamic imagecache manipulation. | This handle will define the first part of the URI: | | {route}/{template}/{filename} | | Examples: "images", "img/cache" | */ 'route' => [FIRST PART OF THE URI YOU WANT FOR DISPLAYING IMAGES], /* |-------------------------------------------------------------------------- | Storage paths |-------------------------------------------------------------------------- | | The following paths will be searched for the image filename, submited | by URI. | | Define as many directories as you like. | */ 'paths' => array( // Insert here your uploads directory public_path('upload'), public_path('images') ), /* |-------------------------------------------------------------------------- | Manipulation templates |-------------------------------------------------------------------------- | | Here you may specify your own manipulation filter templates. | The keys of this array will define which templates | are available in the URI: | | {route}/{template}/{filename} | | The values of this array will define which filter class | will be applied, by its fully qualified name. | */ 'templates' => array( 'small' => 'Intervention\Image\Templates\Small', 'medium' => 'Intervention\Image\Templates\Medium', 'large' => 'Intervention\Image\Templates\Large', ), /* |-------------------------------------------------------------------------- | Image Cache Lifetime |-------------------------------------------------------------------------- | | Lifetime in minutes of the images handled by the imagecache route. | */ 'lifetime' => 43200, );
阅读Intervention/Image 文档了解如何使用它。
您可以在模型上使用HasOneAttachment或HasManyAttachment特质来将其关联到attachments表。
示例
... use Afrittella\BackProject\Traits\HasOneAttachment; ... class Model { use HasOneAttachment; ... }
您可以在config/filesystems.php中更改文件上传的文件夹。
待办事项
- 完整文档在wiki上。
- 更多测试。
- 更好的资产(js/css)管理。
- 更好的翻译管理。
致谢
我受到了Laravel背包项目的启发,但我尝试制作了一个更简单的版本,只包含我为我的项目所需的功能。如果您想合作并改进它,请随意打开PR或发送反馈。
后置项目依赖于以下软件包
- almasaeed2010/adminlte
- prologue/alerts
- doctrine/dbal
- spatie/laravel-permission
- kalnoy/nestedset
- pendonl/laravel-fontawesome
- laravelcollective/html
- caouecs/laravel-lang
- intervention/image
- intervention/imagecache
- laravel/socialite
许可证
此软件包在MIT许可证下授权。