sinclairt/magic-views

简化重复操作blade的CRUD视图。适用于快速应用程序开发(RAD)

1.0.29 2017-03-29 12:35 UTC

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();

布局中有两个用于代码放入的输出方法,分别用于 headfoot,如果你需要的话。