thisvessel/caravel

此软件包已被废弃,不再维护。没有建议的替代软件包。

基于Laravel构建的轻量级CMS。

dev-master 2017-12-24 02:01 UTC

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属性。有两种方法来配置一个字段

  1. 简写字符串配置,允许您快速指定字段类型(例如,type:simplemde),字段修饰符(例如,unlist),以及Laravel验证规则。使用管道|分隔符指定多个修饰符和/或规则。

  2. 嵌套数组配置,允许您为typemodifiersruleslabeldefaulthelprelation嵌套数组元素。

可用字段类型

以下字段类型包含在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 开发的 FormBootForms 是出色的包。您可以使用这些包,否则纯文本标记也将工作得很好。

自定义视图

您可以轻松覆盖 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将跳过授权检查,并授予用户完全访问权限。