sinclairt / magic-views
简化重复操作blade的CRUD视图。适用于快速应用程序开发(RAD)
Requires
- illuminate/contracts: ^5.1
- illuminate/support: ^5.1
- illuminate/view: ^5.1
README
魔法视图是一种快速简单的方式来实现CRUD视图,可以根据需要添加或减少定制。
安装
composer require sinclairt/magic-views
composer install
将服务提供者添加到您的app/config
Sinclair\MagicViews\MagicViewsServiceProvider::class
composer dump-autoload
使用
在控制器中使用特型use HasMagicViews;
。目前,有四个视图:索引、创建、编辑和显示。编辑和更新视图需要$model
变量,索引视图需要$rows
变量,它应该是Illuminate\Pagination\Paginator
的实例。您可以通过在查询的末尾使用paginate()
而不是get()
来获取分页对象,例如:
$users = User::where('votes', '>', 100)->paginate(15);
因此,索引方法可能看起来像这样
public function index() { $rows = User::where('votes', '>', 100)->paginate(15); return $this->indexView(compact('rows')); }
创建如下...
public function create() { return $this->createView(); }
编辑...
public function edit($model) { return $this->editView(compact('model')); }
显示...
public function show($model) { return $this->showView(compact('model')); }
假设
魔法视图做了一些假设,以确保您的视图可以尽可能少地配置即可渲染。
-
您正在使用资源路由,您的路由名称与模型相同,例如
User
模型意味着Route::resource('user', 'UserController');
。 -
您正在遵循模型和控制器命名的约定,例如
User
模型有一个控制器名为UserController
。 -
您已经通过其简短名称在IoC容器中注册了模型,例如
App\Models\User
在IoC容器中注册为User
。
$this->app->bind('User', 'App\Models\User'); // 或者如果您遵循SOLID原则,可以是一个接口
设置
索引视图将使用$fillable
数组和$hidden
数组来决定要显示哪些列,但您可以通过在模型上设置$indexColumns
变量来覆盖此设置。
public $indexColumns = [ 'username', 'email', 'created_at'];
创建和编辑视图使用$fillable
数组在表单上显示字段,这些默认为文本,但您可以通过在模型上设置$fields
变量来覆盖此设置。
public $fields = [ 'username' => 'text', 'password' => 'password', 'email' => 'email', 'password_confirmation' => 'password' ];
键是字段名称,值是字段类型。
可用字段类型
- 文本
- 纯文本
- 电子邮件
- 密码
- 单选按钮
- 选择框
- 复选框
- 文本区域
- 提交
- 禁用文本
当然,您可以扩展这一点。发布资产,然后添加自己的blade在部分/form目录中,并在字段数组中列出视图。例如,假设您需要在创建用户时添加角色分配的特定输入,那么您可能有一个roles.blade.php
,然后设置'role_id' => 'roles'
,嘿,您的自定义输入就在表单中使用了。这比使用$additionalFormContentBefore
和$additionalFormContentAfter
钩子更快地向表单添加内容。
字段说明
选择框需要一个选项,通过传递一个变量设置选项,该变量的命名约定为字段名Options,例如角色将是一个$roleOptions
。该变量应该是一个关联数组,键为从表单提交的值,值为选项的显示值。
$roleOptions = [ 3 => 'admin', 5 => 'standard', 10 => 'supervisor' ];
按钮
在索引视图中有一些按钮:显示、编辑、删除,以及你的模型使用软删除恢复的地方。默认情况下,所有按钮都处于开启状态(当对象被放入回收站时,只显示恢复和显示按钮,而恢复按钮被隐藏,编辑和删除按钮被添加。你可以通过传递一个包含你希望显示的按钮的$buttons
变量来配置你希望显示的按钮
// this will enable the show and edit buttons only $buttons = ['show', 'edit']; return $this->indexView(compact('rows', 'buttons'));
有时你可能想要禁用对象的创建,为此设置变量$new = false;
并将其传递到你的视图中,这将移除新按钮。
通过设置变量$dropdown = true
并将它传递到视图中,可以将按钮格式化为下拉菜单。
显示值
有三种方法可以做到这一点,即使用原始值、使用Laravel的修改器或者使用演示者。如果你对前两种方法感到满意,那么就没有更多的事情要做,除非需要了解Eloquent修改器。如果你想使用演示者,Magic Views会查找这个,以便可以在视图中使用它,它将假设演示者上的方法是以“present”开头并且是字段名的驼峰命名,例如user_id
变成presentUserId
。如果你想覆盖演示者方法的名字来使用,可以传递一个带有presentFieldName命名约定的变量,例如user_id
会变成$presentUserId
;然后你可以传递一个包含你想要使用的方法名称的字符串,例如,如果你想显示用户名而不是user_id,你的演示者上的方法是userName
,你可以这样做:
$presentUserId = 'userName'; return $this->indexView(compact('model', 'presentUserId'));
现在Magic Views将加载userName方法。
如果你在演示者中没有这个方法,它将回退到列值或设置好的修改器。
其他变量
Magic Views创建以下变量以供视图使用,你可以通过传递变量来自定义它们
- 面包屑
- 操作(这是表单上的操作)
- 页面标题
- 页面副标题
- 面板标题
附加内容
Magic Views允许你向表单和页面添加附加内容。为此,创建一个视图并将视图名称传递到以下变量之一中,然后注入到视图中
-
$additionalFormContentBefore
在表单字段之前添加内容,但仍在表单内 -
$additionalFormContentAfter
在表单字段之后添加内容,但仍在表单内 -
$additionalContentBefore
在内容面板之前添加内容 -
$additionalContentAfter
在内容面板之后添加内容
$additionalContentAfter = 'partials.product.options'; return $this->indexView(compact('rows', 'additionalContentAfter'));
进一步定制
你可以通过更改配置值、语言值或编辑视图本身来进一步自定义视图。为此,通过运行php artisan vendor:publish
来发布包的资产。所有显示在模型和演示者值之外的值都首先通过语言文件传递,语言文件中已经有一个关于用户的示例。术语user
位于数组的最顶层,但user
的字段,包括索引视图中列的名称,都位于fields数组中。在此处也可以设置占位符,只需在列/字段名称末尾添加_placeholder
即可。
如果你想用自己的部分替换任何部分,你可以在配置文件中更改值。你还可以更改标题标签、品牌图像、导航链接、表单操作假设以及你可能想要的任何面包屑前缀,例如“主页”或“仪表板”。
此外,对于语言文件,还有一个回退选项。如果你向 Laravel 的 trans('general.responses.success')
方法提供一个点符号字符串,且找不到值,则将返回点符号字符串(general.responses.success
),背后的逻辑是如果以这种方式显示,更容易发现缺失的语言值。如果你启用回退(默认为 true),它将找到点符号字符串中的最后一个元素,并返回该元素而不是完整字符串,即 general.responses.success
变为 success
。如果你想要关闭这个功能,将 use-trans-fallback
更改为 false
。如果你想在自己的代码中使用这个方法,请使用 get_trans()
方法。
除此之外,你还可以编辑视图本身。
最后
只要你创建了它们,你就可以扩展 Magic Views。例如,假设我们要为用户创建一个统计页面,创建一个 stats.blade.php
文件,可能扩展 magic-views::layout.master
(或使用配置值 config('magic-views.master')
),并添加一个包含内容的 content
部分。现在你可以在控制器中调用 return $this->myView(['blade' => 'path.to.stats']);
。或者,如果你发布了资源文件(使用 php artisan vendor:publish
),并将你的视图放在 resources/views/vendor/magic-views/crud
目录中,你可以调用 $this->statsView();
布局中有两个用于代码放入的输出方法,分别用于 head
和 foot
,如果你需要的话。