arandu / laravel-mui-admin
适用于Laravel的高度可定制CMS,使用React和Material UI构建。
Requires
- php: ^8.0
- ext-dom: *
- ext-gd: *
- ext-simplexml: *
- ext-xml: *
- ext-xmlreader: *
- ext-xmlwriter: *
- ext-zip: *
- illuminate/console: ^9.19
- illuminate/database: ^9.19
- illuminate/filesystem: ^9.19
- illuminate/http: ^9.19
- illuminate/macroable: ^9.19
- illuminate/routing: ^9.19
- illuminate/support: ^9.19
- laravel/ui: ^4.2
- phpoffice/phpspreadsheet: ^1.29
- spatie/laravel-permission: ^6.0
This package is auto-updated.
Last update: 2024-09-14 15:32:23 UTC
README
面向模型,高度可定制的Laravel 8.x CMS,提供一套全栈工具,以实现敏捷的Web应用开发。
由Material-UI和React构建
注意: 此包仍在开发中。在1.0.0版本之前,API可能发生重大变化。
模板
我们提供了一个模板,以使用此包开始一个项目。[点击这里]({{LINK AQUI}})
如果您想手动安装,请参阅安装文档
基本使用
- 创建初始角色
- 创建新的管理员用户
- 渲染管理面板
- 为管理面板准备模型
- 添加
HasAdminSupport
特质 - 前端Eloquent模型
- 个性化
- 个性化模型页面列
- 添加自定义字段
- 添加自定义标签页
- 添加自定义搜索
- 添加
创建初始角色
要创建初始角色,请将RolesAndPermissionsSeeder
添加到DatabaseSeeder
文件中。示例
$this->call([ // ... RolesAndPermissionsSeeder::class, ]);
然后,执行以下命令执行seeder类
php artisan db:seed
或者,您可以使用以下命令仅种植功能和权限
php artisan db:seed --class=RolesAndPermissionsSeeder
创建新模型权限
在开发过程中,您可以创建需要访问权限的新模型。要更新应用程序的权限列表,请执行以下命令
php artisan admin:permissions
创建新的管理员用户
要创建新的管理员用户,请执行以下命令
php artisan admin:credentials
此命令将询问用户名、电子邮件和密码,并创建一个新的具有admin
角色的用户。
为管理面板准备模型
为了准备模型以供管理面板使用,您需要向其添加HasAdminSupport
特质。此特质将为模型添加使它与管理面板一起工作的必要方法。
此外,您必须在模型中配置$fillable
属性。此属性用于告知前端哪些字段可以填充,也用于渲染模型页面列。您可以如后文所述自定义字段和列。
添加HasAdminSupport
特质
use Arandu\LaravelMuiAdmin\Traits\HasAdminSupport; class Post extends Model { use HasAdminSupport; protected $fillable = [ 'title', 'content', ]; }
添加特质后,应有一个与模型复数名称和蛇形名称对应的路由。例如,如果模型名为Post
,则路由应为/posts
。如果模型名为BlogPost
,则路由应为/blog_posts
。通过更改resources/js/src/views/Layouts/Admin.jsx
文件添加侧边菜单链接
import { NavLink } from 'react-router-dom'; import { route } from '@arandu/laravel-mui-admin'; const navMenuItems = [ // ... { key: 3, text: 'Posts', icon: 'posts', ListItemButtonProps: { component: NavLink, to: route('admin.post.index'), }, }, ]
请注意,使用route
函数从其名称中获取路由路径。将HasAdminSupport
特质添加到模型后,以下路由将可用
- WEB
admin.{model_name}.index
:模型页面
- API
admin.{model_name}.list
:获取分页模型列表admin.{model_name}.create
:创建新模型admin.{model_name}.item
:通过id获取模型admin.{model_name}.update
:通过id更新模型admin.{model_name}.delete
:通过id删除模型
如果模型具有SoftDeletes
特质,以下路由也将可用
- API
admin.{model_name}.restore
:通过id恢复模型admin.{model_name}.forceDelete
:通过id永久删除一个模型
如果您想自定义路由,可以向模型中添加以下方法
public function getWebUrls() { return [ 'index' => 'custom/url/path', // use este array para criar rotas web adicionais, se desejar ]; } public function getApiUrls() { return [ 'list' => 'custom/url/to/posts', 'item' => 'custom/url/to/posts/{id}', 'create' => [ 'url' => 'custom/url/to/posts/create', 'method' => 'post', ], 'update' => [ 'url' => 'custom/url/to/posts/{id}/update', 'method' => 'post', ], 'delete' => [ 'url' => 'custom/url/to/posts/{id}/delete', 'method' => 'delete', ], // Se o modelo tiver o trait SoftDeletes, adicione o seguinte também: // 'restore' => [ // 'url' => 'custom/url/to/posts/{id}/restore', // 'method' => 'post', // ], // 'forceDelete' => [ // 'url' => 'custom/url/to/posts/{id}/force-delete', // 'method' => 'delete', // ], // use este array para criar rotas api adicionais, se desejar // porém será necessário criar os métodos correspondentes no controller // e registrar a controller na configuração 'admin.cms.controller_overrides' ]; }
关于关系的一些说明
由于前端模型,此包会检查模型“后端”中存在的每个关系。为了使它工作,关系方法必须在具有类型提示的模型中定义。例如
class Post extends Model { public function user(): BelongsTo # ou : HasMany, : HasOne, etc. { return $this->belongsTo(User::class); } }
这将解锁一些功能,如关系同步,并允许前端自动加载相关模型。
个性化
自定义模型页面上的列
默认情况下,组件RepositoryIndex
将渲染一个具有与模型属性$fillable
相对应的列的表格。如果您想自定义列,必须在您的项目中创建一个名为app/Admin/Tables/{$model}Table.php
的类。例如,如果模型名为Post
,类名应该是PostTable
。
创建的类必须至少有一个名为default
的方法,该方法将在未指定其他方法时使用。例如,如果您想自定义Post
模型的列,您必须在app/Admin/Tables/PostTable.php
中创建一个包含以下内容的类
<?php namespace App\Admin\Tables; use Arandu\LaravelMuiAdmin\Contracts\Table; class PostTable extends Table { public function default() { return [ [ // 'key' é o nome do atributo no modelo 'key' => 'title', // 'label' é o texto que será exibido na coluna 'label' => __('Title'), ], [ // Você pode utilizar o ponto para acessar atributos aninhados 'key' => 'author.name', 'label' => __('Author Name'), ], [ // Você pode criar colunas personalizadas para serem // gerenciadas posteriormente no frontend 'key' => 'categories', 'label' => __('Categories'), ] ]; } }
如果您想在其他地方创建类或使用其他名称,您需要在模型中添加
$tableClass
属性。例如:protected $tableClass = 'App\\Tables\\PostTableWithCustomName';
添加自定义字段
默认情况下,组件RepositoryIndex
将渲染一个具有与模型属性$fillable
相对应的字的表单,并且所有字段都将类型为text
。如果您想自定义字段,必须在您的项目中创建一个名为app/Admin/Forms/{$model}Form.php
的类。例如,如果模型名为Post
,类名应该是PostForm
。这个类必须扩展Arandu\LaravelMuiAdmin\Contracts\Form
类,并且必须至少有一个名为default
的方法,该方法将在未指定其他方法时使用。
<?php namespace App\Admin\Forms; use Arandu\LaravelMuiAdmin\Contracts\Form; class PostForm extends Form { public function default() { return [ [ // 'name' é o nome do atributo no modelo 'name' => 'title', // 'label' é o texto que será exibido no campo 'label' => __('Title'), // 'type' é o tipo do campo, por padrão é 'text' 'type' => 'text', // parâmetros adicionais serão passados para o componente 'required' => true, ], [ 'name' => 'content', 'label' => __('Content'), 'multiline' => true, ], // Você pode relacionar modelos com o // campo tipo 'autocomplete'. Para isso, // o relacionamento deve estar definido // com dicas de tipo, como descrito acima. // Ex: relação tipo `BelongsTo` com uma model // `User` chamada `author`. // Também será necessário que // a chave estrangeira (ex: `author_id`) // esteja no array `$fillable` do modelo Post. [ 'name' => 'author', 'label' => __('Author'), 'type' => 'autocomplete', // O autocomplete irá listar itens // da model relacionada, por padrão. // É possível também fornecer resultados personalizados // para a listagem do autocomplete, ex: // 'list' => function ($search) { // return User::role('author')->search($search)->get(['id', 'name']); // } ] ]; } }
如果您想在其他地方创建类或使用其他名称,您需要在模型中添加
$formClass
属性。例如:protected $formClass = 'App\\Forms\\PostFormWithCustomName';
添加自定义标签页
显示在页面上的选项卡应通过使用@arandu/laravel-mui-admin
包的addFilter
方法注册一个过滤器来在前端自定义,请参阅此处。
要处理选项卡的查询,请在模型中覆盖scopeWhereBelongsToTab
方法。例如,如果您想添加一个选项卡以仅显示已发布的帖子,您必须向模型Post
添加以下方法
public function scopeWhereBelongsToTab($query, $tab) { if ($tab === 'published') { $query->where('published', true); } }
默认情况下,组件RepositoryIndex
将渲染一个名为all
的选项卡,该选项卡将显示所有模型。如果模型具有SoftDeletes
特质,则还会渲染一个名为trashed
的选项卡。不要忘记在scopeWhereBelongsToTab
方法中处理这些选项卡。
添加搜索
默认的搜索实现将对属性$fillable
的所有字段使用"LIKE"
进行查询。如果您想自定义搜索,请覆盖模型中的scopeSearch
方法。例如,如果您只想根据标题或作者名进行搜索,您必须向模型Post
添加以下方法
public function scopeSearch($query, $search) { $query->where(function ($query) use ($search) { $query->where('title', 'like', "%{$search}%"); $query->orWhereHas('author', function ($query) use ($search) { $query->where('name', 'like', "%{$search}%"); }); }); }
深入探讨
有关更多信息,请等待完整的文档。目前,您可以查看此包的源代码以及包(@arandu/laravel-mui-admin
)[https://github.com/AranduTech/react-laravel-mui-admin],以了解可以做什么。