thisvessel / caravel
基于Laravel构建的轻量级CMS。
Requires
- php: >=5.5.0
- adamwathan/bootforms: ^0.8.0
- doctrine/dbal: ^2.5
- league/commonmark: ^0.13.0
Requires (Dev)
- illuminate/support: 4.*
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2020-05-30 16:04:43 UTC
README
免责声明:这是一个正在进行中的工作!自行承担风险使用!
基于Laravel构建的轻量级CRUD层,当CMS过于复杂时使用。非常适合原型设计,但高度可扩展。它将与您的Eloquent模型挂钩,并自动生成基本的CRUD管理的RESTful资源路由和视图。您可以自行提供身份验证、视图定制、字段类型等。在此观看快速演示。
安装
1. 在您的Laravel中安装。
composer require 'thisvessel/caravel:dev-master'
注意:当我大致满意实现时,我会标记一个版本。
2. 将CaravelServiceProvider添加到/config/app.php中的providers数组中。
ThisVessel\Caravel\CaravelServiceProvider::class,
3. 发布Caravel的配置文件。
php artisan vendor:publish --tag="caravel-config"
4. 将Eloquent模型映射添加到/config/caravel.php中的资源数组中。
'resources' => [ 'products' => App\Product::class, 'newsletters' => App\Newsletter::class, ],
5. 将Caravel的路由复制到您的routes.php文件中。
// Caravel Route Group Route::group(['prefix' => config('caravel.prefix'), 'as' => 'caravel::'], function () { // Default Caravel Routes ThisVessel\Caravel\Routes::default(); });
要检查哪些路由是动态生成的,请从项目根目录运行以下命令。
php artisan route:list
如果您将Caravel配置为独立安装,或者您通过子域进行路由,您可能更喜欢在/config/caravel.php中设置自定义的路由前缀prefix
。可以设置为null
。
就这样!现在您已经拥有了一个功能性的CRUD层。
字段配置
字段配置发生在您的Eloquent模型中。
class Author extends Model { /** * Caravel configuration. * * @var array */ public $caravel = [ 'username' => 'required', 'password' => 'type:password|required|min:8', 'biography' => [ 'type' => 'simplemde', 'modifiers' => 'unlist', 'rules' => 'required|min:10', 'label' => 'Author Biography', 'default' => 'I am a default value.', 'help' => 'Help block text goes here.', ], ];
您的模型的$caravel
属性允许您为Caravel的创建和更新定义可填充字段、字段修饰符、验证规则等。您不需要为Caravel设置$fillable
属性。有两种方法来配置一个字段
-
简写字符串配置,允许您快速指定字段类型(例如,
type:simplemde
),字段修饰符(例如,unlist
),以及Laravel验证规则。使用管道|
分隔符指定多个修饰符和/或规则。 -
嵌套数组配置,允许您为
type
、modifiers
、rules
、label
、default
、help
和relation
嵌套数组元素。
可用字段类型
以下字段类型包含在Caravel中
字段类型 | 描述 |
---|---|
input | 基本文本输入 |
textarea | 基本文本区域 |
simplemde | Simplemde markdown编辑器 |
password | 基本密码输入 |
select | 基本选择下拉菜单 * |
多选 | 基本多选 * |
单选按钮 | 基本单选按钮输入组 * |
复选框 | 基本复选框输入组 * |
文件 | 基本文件输入 ** |
*关于选择、单选按钮和复选框字段类型...
当使用选择、单选按钮或复选框类型时,您可以传递一个引用到用于指定可用选项的Eloquent 访问器方法。示例
'published' => 'type:radio,publishedOptions'
上述示例中的第二个参数是对 publishedOptions 访问器的引用,您可以在模型中定义它,并用于为字段动态生成单选选项
public function getPublishedOptionsAttribute() { return [ 1 => 'Published', 0 => 'Hidden', ]; }
这将生成一对具有二进制布尔值的单选选项
<label><input type="radio" name="published" value="1"> Published</label> <label><input type="radio" name="published" value="0"> Hidden</label>
**关于文件输入字段类型...
Caravel 目前不提供文件上传处理。建议您利用Eloquent Mutators来处理文件上传。Mutators 提供了丰富的可能性。例如,您可以直接在该字段的 mutator 中处理文件上传,或者将文件对象传递到外部服务类来处理上传。示例和辅助工具即将推出。
添加字段类型
您只需在模型的 $caravel
字段配置中引用一个新的 type
字符串即可添加您的新字段类型。此新类型无需在任何地方注册。只需确保为 Caravel 提供适当的新字段类型的视图部分即可。有关字段类型视图部分的几个注意事项
- 将您的新视图部分放置在
/resources/views/vendor/caravel/fields
中。 - 您负责正确显示标签、帮助块文本、验证状态等。
- 一个包含必要数据以用于您的标记(例如,名称、标签、必填、帮助块文本等)的
$field
对象将自动传递到您的视图部分。 - 一个包含模型对象的
$model
对象也将自动传递到您的视图部分,以防您需要访问其他模型属性。 - 最后,
$form
和$bootForm
表单构建器对象也将传递到您的视图部分。由 Adam Wathan 开发的 Form 和 BootForms 是出色的包。您可以使用这些包,否则纯文本标记也将工作得很好。
自定义视图
您可以轻松覆盖 Caravel 的视图和视图部分。首先将 Caravel 的视图发布到项目的 /resources/views/vendor/caravel 文件夹。
// Publish All Views
php artisan vendor:publish --tag="caravel-views"
// Publish Field View Partials Only
php artisan vendor:publish --tag="caravel-fields"
一旦这些视图被发布,您就可以修改该文件夹中的任何内容。Caravel 将尝试在加载其默认视图之前加载您的视图。
身份验证
使用您自己的身份验证!虽然 Laravel 附带了身份验证功能,但您可以轻松地将任何身份验证中间件应用到 Caravel 的路由组。别忘了通知 Caravel 您的注销路由,以便在菜单中显示正确的链接!这可以在 /config/caravel.php 中指定。
需要登录视图?您可以使用以下命令将 Caravel 的登录视图发布到 /resources/views/auth。
php artisan vendor:publish --tag="caravel-auth"
授权
如果您的认证系统与Laravel的授权功能兼容,Caravel已经为您预配置了钩子功能和策略检查。例如,想象一下您在/config/caravel.php
中设置了以下资源映射:
'resources' => [ 'posts' => App\Post::class, ],
Caravel会使用这个映射创建以下能力和策略检查
能力定义 | 策略方法 | 行为 |
---|---|---|
manage-posts | manage() | 用户能否在侧边栏中看到帖子? |
create-posts | create() | 用户能否创建帖子? |
update-post | update() | 用户能否更新帖子? |
delete-post | delete() | 用户能否删除帖子? |
如果您使用上述命名约定定义了能力或策略方法,Caravel将在适用的情况下使用您的授权逻辑。否则,Caravel将跳过授权检查,并授予用户完全访问权限。