exeplor/ ampere
Laravel Ampere
1.1.1
2020-05-20 10:53 UTC
Requires
- php: ^7.4
- laravel/framework: ^7.0
README
Ampere 是 Laravel 框架的一个简单灵活的仪表盘。
部分
- 安装
- 配置
- 路由
- 菜单
- 控制器
- 访问控制列表(ACL)
- 视图
- 网格
- 表单
安装
安装包
composer require exeplor/ampere
将服务提供者添加到 app.php
'providers' => [ Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, // ... \Ampere\AmpereServiceProvider::class, // ... ];
创建新的 Ampere 空间并按照说明操作
php artisan ampere:install
首次安装后运行迁移
php artisan ampere:migrate
配置
return [ /* * Main configuration */ 'app' => [ /* * Ampere url path */ 'url_prefix' => 'myadminpanel', ], /* * Routing configuration */ 'routing' => [ /* * Controllers folder */ 'folder' => 'app/Http/Controllers/Admin', /* * Controller namespace */ 'namespace' => 'App\Http\Controllers\Admin', /* * Space route prefix * Route space name */ 'prefix' => 'my.custom.name', // Example: route('my.custom.name.some.method') /* * Custom route group */ 'group' => [ // If you have some specific middleware or other config // This place for Route::group() arguments 'domain' => env('APP_DOMAIN') ] ], /* * Ampere DB configuration */ 'db' => [ 'prefix' => 'amp_' ], /* * Authorization config */ 'auth' => [ /* * Captcha settings */ 'google_captcha' => [ 'enabled' => env('AMPERE_CAPTCHA_ENABLED', false), 'site_key' => env('AMPERE_CAPTCHA_SITE_KEY'), 'secret_key' => env('AMPERE_CAPTCHA_SECRET_KEY') ] ], /* * Installation settings */ 'install' => [ /* * Ampere public assets folder */ 'assets_folder' => 'vendor/admin' ], /* * Views configuration */ 'views' => [ 'name' => 'admin' ] ];
路由
Ampere 具有动态路由生成功能。所有路由都根据控制器名称和父文件夹名称自动构建。您还可以通过控制器和方法注解自定义路由。
/** * Class HomeController * @package App\Http\Controllers\Admin */ class HomeController extends Controller { /** * @return void */ public function foo() { // Route result // GET /admin/home/foo } /** * @route bar */ public function firstMethod() { // Result // GET /admin/home/bar } /** * @route entity/{id} */ public function secondMethod(int $id) { // Result // GET /admin/home/entity/{$id} } /** * @route update/{id} * @post */ public function thirdMethod(int $id) { // Result // POST /admin/home/update/{$id} } /** * @post secondMethod */ public function fourthMethod(int $id) { // You can inherit route by method name in this controller // @post <controller_method_name> // Result // POST /admin/home/entity/{$id} } /** * @route some/route * @put */ public function fifthMethod() { // Result // PUT /admin/home/some/route } /** * @route some/route * @delete */ public function sixthMethod() { // Result // DELETE /admin/home/some/route } }
现在您可以按特定的控制器方法获取任何路由
$route = HomeController::route('secondMethod', [1]); echo $route->route(); # return "ampere.home.someroutepath" echo $route->url(); # return "home/entity/1" if ($route->access()) { echo 'This route available for current user'; }
菜单
菜单将自动生成。您可以在菜单配置文件中修改您的菜单
/resources/ampere/<ampere_space_name>/menu.php
在控制器方法中使用注解来创建菜单项。
/** * Class HomeController * @package App\Http\Controllers\Admin */ class HomeController extends Controller { /** * @route foo * @menu Home */ public function home() { // Menu items: // Home > [link to "home/foo"] } /** * @menu Items > First */ public function first() { // Menu items: // Home [link to "home/foo"] // Items // First [link to "home/first"] } /** * @menu Items > Second */ public function first() { // Menu items // Home [link to "home/foo"] // Items (submenu item) // First [link to "home/first"] // Second [link to "home/second"] } }
控制器
在大多数情况下,您需要创建 CRUD 控制器。Ampere 有特殊的命令来自动化此任务。
php artisan am:crud Users/Permissions
任何 CRUD 控制器都有模型。Ampere 分析表结构和模型结构,根据这些数据创建验证和关系。此外,此方法还会生成视图。
访问控制列表(ACL)
默认情况下,您对所有路由、所有控制器中的菜单项及其方法都有完整的 ACL。您可以从安装时创建的控制器中管理角色和权限。
视图
要在 Ampere 空间中渲染视图,您需要在控制器中调用 render() 函数。
public function home() { return $this->render('home', ['value' => 'hello']); }
视图示例
<?php /** * @var \Ampere\Services\Workshop\Page\Layout $layout Layout configuration * @var \Ampere\Services\Workshop\Component $component Components manager * @var \Ampere\Services\Workshop\Page\Assets $include Assets manager * @var \Ampere\Services\Workshop\Form\Form $form Form builder * @var object $data Your arguments here */ ?> @php($layout->title('Users')) @php($component->show('header', [ 'title' => 'Users', 'subtitle' => 'List of Users', 'buttons' => [ 'create' => [ 'title' => 'Create new User', 'route' => \App\Http\Controllers\Admin\UsersController::route('create'), 'type' => 'primary' ] ] ])) <div class="ibox"> <div class="ibox-body ibox-nopadding"> Some content </div> </div>
您可以使用以下命令创建新的 Ampere 页面
php artisan am:page mypage
您的页面将创建在 /resources/views/<Ampere_space_name>/pages/mypage.blade.php
网格
这是一个用于数据搜索的默认 Ampere 库。基本示例
use Ampere\Services\Grid\Grid; /** * Class UsersController * @package App\Http\Controllers\Admin */ class UsersController extends Controller { /** * @menu Users * @param Grid $grid */ public function index(Grid $grid) { $grid ->column('id', '#')->strict()->sortable()->asc() ->column('name', 'Name')->search() ->column('email', 'Email')->search() ->column('is_active')->dropdown([ 0 => 'No', 1 => 'Yes' ]); $grid->action('icon:flag-checkered')->success()->route(self::route('stats'), 'id'); $grid->action('icon:pencil-alt')->primary()->route(self::route('edit'), 'id'); $grid->action('icon:trash-alt', 'delete')->danger()->route(self::route('delete'), 'id'); $grid->model(\App\Models\User::class)->limit(24)->search(); return $this->render('users.index', ['mygrid' => $grid]); } }
您还可以使用关系值来显示和搜索。
$grid ->column('id', '#')->sortable()->asc() ->column('role.title')->search() ->column('owner.email')->search()
在视图中渲染网格
<div class="ibox"> <div class="ibox-body ibox-nopadding"> @php($component->grid($data->mygrid)) </div> </div>
列描述
$column = $grid->column('id', '#'); $column->strict(); // Strict search $column->search(); // Default match search $column->sortable(); // Column can by sortable $column->asc(); // Default sort by ASC $column->desc(); // Default sort by DESC $column->date(); // Datetime range filtration $column->dropdown([ 'first' => 'First value', 'second' => 'Second value' ]); // Dropdown column type $column->display(function($rowModel){ return 'Display custom value ' . $rowModel->someValue; });
向您的网格添加操作
$button = $grid->action('Edit'); // Colorize your button $button->primary(); // Primary color $button->success(); // Success color $button->danger(); // Danger color // Custom route $button->route(function(\App\Models\User $user){ return route('some.route.user', $user->id); }); // Ampere route $button->route('users.show', 'id'); // second argument // Similarly $button->route(SomeController::route('show'), 'id');
表单
构建具有基本字段的表单
<!-- Open form and use model if entity exists --> {!! $form->open()->model($user) !!} <!-- Input --> {!! $form ->input('name', 'Personal name') ->type('number') // this is a "type" attribute of input ->value('my default value') // Filled automatically if model exists end field is not empty ->placeholder('Enter your name') ->disabled() // Disable field ->inline() // Show as inline form component ->error('Some error') // Show force error !!} <!-- Dropdown --> {!! $form ->select('dropdown', 'Dropdown type') ->options([ 'first_key' => 'First value', 'second_key' => 'Second value' ]) ->multiple() // Can choice many items ->tags() // Can choice custom string value. Works with multiple() type ->source(UserController::route('search')) // Use lifesearch ->placeholder('My placeholder') ->error('Some error') !!} <!-- Textarea --> {!! $form ->textarea('about', 'Information about user') ->value('Custom value') ->rows(20) ->placeholder('My placeholder') ->error('Some error') !!} <!-- Radio type --> {!! $form ->radio('radio_buttons', 'Some radio') ->items([ 'new' => 'New article', 'draft' => 'Draft article', 'published' => 'Published article' ]) ->value('draft') !!} <!-- Checkbox --> {!! $form->checkbox('checkbox_item', 'Status checked') ->title('Active status') ->checked() !!} <!-- Close form --> {!! $form->close() !!}
所有组件都与验证错误一起工作。您可以使用自己的组件而无需构建器。