bozboz / admin
Requires
- php: >=7.0
- bozboz/permissions: ^1.2
- doctrine/dbal: ^2.5
- guzzlehttp/guzzle: 6.*
- illuminate/support: 5.*
- intervention/image: ^2.3
- intervention/imagecache: ^2.3
- laravelcollective/html: ~5.2
Requires (Dev)
- mockery/mockery: 0.9.*@dev
- phpunit/phpunit: ~4.0.7
- dev-master / 2.x-dev
- v2.17.2
- v2.17.1
- v2.17.0
- v2.16.1
- v2.16.0
- v2.15.3
- v2.15.2
- v2.15.1
- v2.15.0
- v2.14.0
- v2.13.4
- v2.13.3
- v2.13.2
- v2.13.1
- v2.13.0
- v2.12.0
- v2.11.5
- v2.11.4
- 2.11.3
- v2.11.2
- v2.11.1
- v2.11.0
- v2.10.1
- v2.10.0
- v2.9.1
- v2.9.0
- v2.8.4
- 2.8.3
- 2.8.2
- v2.8.1
- v2.8.0
- v2.7.1
- v2.7.0
- v2.6.2
- v2.6.1
- v2.6.0
- v2.5.0
- v2.4.1
- v2.4.0
- v2.3.3
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.0
- v2.1.6
- v2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v2.0.0-alpha
- v1.4.3
- v1.4.2
- v1.4.1
- v1.4.0
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.7
- v1.2.6
- v1.2.5
- v1.2.4
- v1.2.3
- v1.2.2
- v1.2.1
- v1.2.0
- v1.2.0-beta
- v1.2.0-alpha
- v1.1.9
- v1.1.8
- v1.1.7
- v1.1.6
- v1.1.5
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.14
- v1.0.13
- v1.0.12
- v1.0.11
- v1.0.10
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v0.4.4
- v0.4.3
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.0
- v0.2.4
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.0
This package is auto-updated.
Last update: 2023-05-10 11:09:19 UTC
README
安装
-
使用Composer安装此包,运行
composer require bozboz/admin
-
安装Intervention Image
composer require intervention/image
-
将包添加到config/app.php中的providers数组
Bozboz\Admin\Providers\AdminServiceProvider::class, Bozboz\Admin\Providers\MediaLibraryServiceProvider::class, Intervention\Image\ImageServiceProvider::class,
-
可选,将
Bozboz\Admin\Media\Media
添加到app/config/app.php中的aliases数组 -
将
providers.users.model
设置为Bozboz\Admin\Users\User::class
在config/auth.php中 -
删除
database/migrations/
中的默认Laravel用户和密码重置迁移表 -
运行
php artisan vendor:publish && php artisan migrate
-
编辑
config/imagecache.php
<? ... // set route to images 'route' => 'images', ... // add path to uploaded images 'paths' => array( ... public_path('media/image'), ),
控制器
Controllers\ModelAdminController
和Controllers\BulkAdminController
是包含模型标准CRUD功能的抽象类。子类 - 至少 - 必须定义一个构造函数,该构造函数传递一个Decorators\ModelAdminDecorator
或Decorators\BulkAdminDecorator
的实例。例如:
use Bozboz\Admin\Decorators\FooAdminDecorator; class FooAdminController extends ModelAdminController { public function __construct(FooAdminDecorator $foo) { parent::__construct($foo); } }
Laravel将在实例化控制器时,从IoC容器中智能解析依赖,因此剩下的唯一事情是将此控制器作为资源在路由文件中注册,如下所示:
Route::resource('admin/foo', 'FooAdminController');
这将启用在Decorators\ModelAdminDecorator
依赖中定义的模型上的完整CRUD功能。
装饰器
装饰器包含有关模型在管理区域中如何显示的信息。如果您有一个应该访问管理区域的模型,则需要一个相关的装饰器。抽象类Decorators\ModelAdminDecorator
包含一些必须在子类中定义的抽象方法
getLabel
应返回模型的合适字符串表示,通常是实体的标题getFields
应返回一个Fields\Field
实例数组,用于在相关屏幕上创建/编辑实体。
有一些可选方法可以覆盖
getColumns
应返回要显示在管理概览页上的列的键/值数组getHeading
应返回整体模型的字符串表示(而不是如getLabel
中的特定实例)。此方法接受一个布尔参数(默认为false),允许调用脚本请求复数或单数单词。modifyListingQuery
允许修改列表查询,例如,预加载关系,或应用自定义排序或条件。
与Controllers\ModelAdminController
的子类类似,装饰器必须在构造函数中传递一个依赖。这应该是装饰器在管理中代表的实体。此类必须实现Models\BaseInterface
类。
例如:
use Bozboz\Admin\Models\Page; class PageAdminDecorator extends ModelAdminDecorator { public function __construct(Page $page) { parent::__construct($page); } }
表示多对多关系
多对多关系也可以在管理员中以同步和列表关系的形式表示。这两种类型都使用Select2字段,并允许您管理两个实例之间的多对多关系。
同步关系更常见,允许从列表中选择相关模型,并在保存时在正在编辑的模型和相关模型之间创建映射。要定义同步关系,请向您的装饰器中添加一个getSyncRelations
方法,并返回要同步的关系数组,例如:
public function getSyncRelations()
{
return ['categories'];
}
列表关系在相关模型可以用简单字符串表示时很有用(例如标签)。列表关系类似于同步关系,但它们可以在编辑/创建屏幕内组合。使用select2的"标签"选项,您可以在select2输入内添加新选项。任何创建的新实例将在父模型保存时保存。
列表关系与同步关系定义类似,但必须指定要保存新字符串的字段,例如:
public function getListRelations()
{
return [
'tags' => 'name'
];
}
在上面的示例中,标签模型必须包含一个"名称"属性。
一旦定义了任何同步/列表关系,为了在编辑模型的表单中表示它们,您必须在装饰器的getFields
方法中添加一个BelongsToManyField
实例。
public function getFields($instance)
{
return [
..
new BelongsToManyField(new FooDecorator(new Foo), $instance->foos());
];
}
此外,对于列表关系,要启用Select2的"标签"功能,您必须在BelongsToManyField参数中设置一个data-tags
属性。
public function getFields($instance)
{
return [
..
new BelongsToManyField(new TagDecorator(new Tag), $instance->tags(), [
'data-tags' => true
]);
];
}
筛选列表
可以在装饰器中指定列表过滤器,以在管理员中提供筛选选项,从而在管理员概览屏幕上筛选返回的结果。它们应在各自的装饰器上的getListingFilters
方法中定义。该方法应返回一个Reports\Filters\ListingFilter
子类的数组。
有两种内置的列表筛选器:ArrayListingFilter
和SearchListingFilter
。
数组列表筛选器
此筛选器接受一个选项数组,并渲染一个选择框。它接受一个可选的第三个参数,允许自定义筛选逻辑。如果省略此参数,则根据所选选项在模型上执行基于筛选名称的查找。如果传递一个字符串作为第三个参数,则该字段将用于where条件。如果参数是回调,则将运行此回调以筛选列表查询。
可以指定一个第四个"默认"值,如果默认选项不是0/空。
例如:
public function getListingFilters()
{
return [
new ArrayListingFilter('state',
['All', 'New', 'Completed', 'Failed']
, 'state_id', 2)
];
}
搜索列表筛选器
此筛选器为每个输入的单词提供了相当基本的LIKE搜索指定的列。它用于搜索的字段默认为筛选器的名称(第一个参数),但可以指定为一个数组作为第二个参数。
默认查询将对构造筛选器时定义的每个列执行查询词的通配符LIKE搜索。例如,对"名称"和"描述"列的"foo"搜索将生成以下SQL where条件:
WHERE `name` LIKE '%foo%' OR `description` LIKE '%foo%'
要覆盖此默认实现,可以将闭包作为构造函数的第三个参数传递,该闭包接受查询构建器对象,并允许您按需查询。
模型
本包中的所有模型都扩展了Models\Base
(Models\BaseInterface
的实现)。
验证器
模型的验证规则存储在独立的验证服务类中。验证子类应该扩展 Services\Validators\Validator
类。希望进行验证的模型有责任定义自己的验证子类,在其中定义验证模型数据的验证规则。
"rules" 属性
这些是在所有验证实例中应应用的规则。
"storeRules" 属性
仅在存储新的模型实例时应应用的规则。将与 "rules" 属性合并。
"updateRules" 属性
仅在更新现有模型实例时应应用的规则。将与 "rules" 属性合并。
唯一规则
Laravel 的唯一规则在更新时将失败,因为在保存模型上验证的值将与数据库中已存在的条目的值冲突。为了解决这个问题,Laravel 提供了以下更详细的语法来定义唯一验证规则:'unique:<table>,<field>,<id>'
。
规则中可以硬编码表和字段,但是 ID 是一个动态值。这可以在您的验证服务中使用花括号占位符表示,例如 'unique:pages,slug,{id}'
。
占位符语法适用于模型上的任何属性,因此它可以用于 Laravel 的扩展唯一功能,例如 'unique:users,email_address,{id},id,account_id,{account_id}'
。
特性
DynamicSlugTrait
自动为模型的 slug 生成值。在相应的模型上使用该特性并定义一个返回用于生成 slug 的属性名称的 getSlugSourceField
方法。
字段
DateTimeField
使用 datetimepicker 插件扩展了 jQuery UI DatePicker 的功能。文档可以在这里找到。
实例化 DateTimeField
对象时,可以通过传递一个映射到 'options' 键的数组来覆盖默认的 datetimepicker 配置。
这将被 JSON 编码并合并到默认配置中,当 DOM 渲染时使用。当在 datetimepicker 文档中传递定义为 JS 日期对象的值时,请将这些值定义为纪元值(例如 time()
或 $dateTime->format('U')
)。
URLField
URLField 可以从另一个字段自动生成 slug。为了使用此功能,您必须将 data-auto-slug-from
属性设置为要针对的字段的名称属性。
例如。
<?php new URLField('slug', [ 'route' => '...', 'data-auto-slug-from' => 'name', ]);
辅助函数
-
asset_version
将最后修改时间添加到资产文件名的末尾,以实现缓存破坏。
用法
{{ asset_version('assets/css/min/style.css') }}
为了使此功能生效,您必须将以下内容添加到
.htaccess
文件中# Rewrite cachebusted assets RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} ^.*\.(css|js)$ RewriteRule ^(.+)--\d+\.([^\.]+)$ $1.$2 [L]