aimeos / laravel-cms
Laravel CMS
Requires
- ezyang/htmlpurifier: ^4.16
- intervention/image: ^3.0
- kalnoy/nestedset: ^6.0
- laravel-json-api/laravel: ^2.6||^3.0
- laravel/framework: ^9.0||^10.0
- league/commonmark: ^2.0
- mll-lab/graphql-php-scalars: ^6.0
- nuwave/lighthouse: ^6.4
- symfony/uid: ^6.0
Requires (Dev)
- laravel-json-api/testing: ^2.1
- orchestra/testbench: ^8.0
This package is auto-updated.
Last update: 2024-09-19 10:36:06 UTC
README
Laravel CMS - 强大如Contentful,简单如Wordpress!
简单、灵活且可扩展的API-first Laravel CMS包
- 像在Contentful一样管理结构化内容
- 几秒钟内定义新的内容元素
- 允许嵌套内容元素
- 保存、发布和撤回草稿
- 将内容分配给多个页面
- 极快的JSON前端API
- 多功能的GraphQL管理API
- 支持多语言
- 支持多域名路由
- 支持多租户
- 支持软删除
- 完全开源
- 从单个页面扩展到使用DB集群的数百万页面
可以安装到任何现有的Laravel应用程序中。
目录
安装
在您的Laravel应用程序目录中运行此命令
composer req aimeos/laravel-cms php artisan cms:install --seed
如果您不想添加任何演示页面,请删除 --seed
选项。
授权
要允许现有用户编辑CMS内容或在没有用户的情况下创建新用户,您可以使用 cms:user
命令(将电子邮件地址替换为用户的电子邮件地址)
php artisan cms:user editor@example.com
要禁止用户编辑CMS内容,使用
php artisan cms:user --disable editor@example.com
清理
为了定期清理软删除的页面、内容和文件,请将这些行添加到您的 app/Console/Kernel.php
类中的 schedule()
方法
$schedule->command('model:prune', [ '--model' => [ \Aimeos\Cms\Models\Page::class, \Aimeos\Cms\Models\Version::class, \Aimeos\Cms\Models\Content::class, \Aimeos\Cms\Models\File::class], ])->daily();
您可以通过设置 cms.purge 选项来配置软删除项在永久删除后的时间段。其值必须是项目将被永久删除的天数,或者如果不应删除软删除的项目,则为FALSE。
多域名
通过更改 ./routes/web.php
中的 cms.page
路由,可以使用不同的域名配置多个页面树
Route::group(['domain' => '{domain}'], function() { Route::get('{slug?}/{lang?}', [\Aimeos\Cms\Http\Controllers\PageController::class, 'index'])->name('cms.page'); });
页面的 domain
属性必须与请求的域名匹配。
多租户
Laravel CMS支持使用现有的Laravel租户包或您自己实现的代码实现的单数据库多租户。
最常用的是Tenancy for Laravel 包。如何设置该包的说明可以在租户快速入门中找到,也可以查看单数据库租户文章。
之后,告诉Laravel CMS如何检索当前租户的ID。将此代码添加到 ./app/Providers/AppServiceProvider.php
文件中的 \App\Providers\AppServiceProvider
的 boot()
方法
\Aimeos\Cms\Tenancy::$callback = function() { return tenancy()->initialized ? tenant()->getTenantKey() : ''; };
自定义授权
如果您想将Laravel CMS集成到另一个应用程序中,您可能希望根据您自己的授权方案授予访问权限。您可以通过添加自己的函数来替换Laravel CMS的权限处理。将此代码添加到 ./app/Providers/AppServiceProvider.php
文件中的 \App\Providers\AppServiceProvider
的 boot()
方法
\Aimeos\Cms\Permission::$callback = function( string $action, ?\App\Models\User $user ) : bool { if( /* check access */ ) { return true; } return false; };
第一个参数是请求的操作访问权限,例如 "page:view",而第二个参数是认证后的用户对象。默认情况下,CMS用户的权限通过其用户对象中的cmseditor
列的授权位图进行检查,该列来自Laravel的users
表。函数必须返回TRUE以授权访问或返回FALSE以拒绝访问。
可以授权访问的动作包括
- page:view(显示页面树)
- page:save(更新现有页面)
- page:add(添加新页面)
- page:drop(软删除页面)
- page:keep(恢复软删除的页面)
- page:purge(永久删除页面)
- page:publish(发布页面元数据)
- page:move(在树中移动页面)
- content:view(显示内容元素)
- content:save(更新现有内容元素)
- content:add(添加新内容元素)
- content:drop(软删除内容元素)
- content:keep(恢复软删除的内容元素)
- content:purge(永久删除内容元素)
- content:publish(发布内容元素)
- content:move(在页面内移动内容元素)
- file:view(显示上传的文件)
- file:save(更新现有文件)
- file:add(添加新文件)
- file:drop(软删除文件)
- file:keep(恢复软删除的文件)
- file:purge(永久删除文件)