exeplor/ampere

Laravel Ampere

1.1.1 2020-05-20 10:53 UTC

This package is auto-updated.

Last update: 2024-09-20 01:26:45 UTC


README

Ampere 是 Laravel 框架的一个简单灵活的仪表盘。

部分

  1. 安装
  2. 配置
  3. 路由
  4. 菜单
  5. 控制器
  6. 访问控制列表(ACL)
  7. 视图
  8. 网格
  9. 表单

安装

安装包

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() !!}

所有组件都与验证错误一起工作。您可以使用自己的组件而无需构建器。