gitsccit / web-skeleton
CakePHP 骨架插件
Requires
- cakephp/cakephp: ^5.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-17 06:31:23 UTC
README
此插件为通用Web应用程序提供了一个起点,功能包括CRUD操作、文件处理、HTTP请求日志记录、软删除、自动模板化等。
安装
-
使用composer安装
composer require gitsccit/web-skeleton
-
加载插件
bin/cake plugin load Skeleton
-
运行迁移和种子
bin/cake migrations migrate -p Skeleton bin/cake migrations seed -p Skeleton
使用方法
ApiHandler
应用程序服务器的API客户端,包含与App服务器通信的方法。
将这些条目添加到 app_local.php
。
Urls => [
'apps' => '...', // App server url, this could be dev/test/prod.
'refreshCallback' => '...', // The endpoint that App server will call when an update is detected, defaults to '/pages/clear-cache'.
],
Security => [
'appServerApiToken' => '...' // The token used to access App server API.
],
Bake
烘焙时使用选项 -t Skeleton
。例如,bin/cake bake all users -t Skeleton
行为
当前用户
对于所有传入的保存请求,此行为将请求数据中的 user_id
设置为 Session::read('Auth.User.id')
。
可过滤的
允许通过在URL中传递查询参数来过滤表。
-
将可过滤的行为添加到您想要过滤的表。
$this->addBehavior('Skeleton.Filterable', [ 'fields' => [ 'title', // value defaults to ['contain'] 'tag_count' => ['lte'], 'Tags__name' => ['contains', 'exact'], ], 'names' => [ 'Tags__name' => 'Tag', ], ]);
fields
是必需的,您可以通过定义names
来定义字段的自定义名称。 -
在请求URL中设置查询参数。例如
/pages?title=skeleton
将返回包含 'skeleton' 的页面条目。/pages?title__exact=skeleton
将返回标题正好为 'skeleton' 的页面条目。/pages?tag_count__lte=5
将返回标签计数小于或等于5的页面条目。/pages?Tags__name=plugins
将返回标签名称包含 'plugins' 的页面条目。
支持的运算符有 contains
、exact
、gt
、gte
、lt
、lte
、ne
。默认为 contains
,如果查询参数中没有指定操作。
CRUD
-
让
AppController
继承\Skeleton\Controller\AppController
。 -
所有HTTP响应都将基于请求中的
Accept
标头来解析,即如果Accept
标头设置为application/json
,则响应将进行JSON序列化。 -
为模板使用设置了一些方便的视图变量。有关列表,请参阅下面的
Template
部分。
主/副本数据库连接
-
将
default
数据源配置为主数据库,将replica
配置为副本数据库。 -
在引导过程中从主/副本创建插件的数据源配置。例如,为插件
Apps
创建apps
和apps_replica
数据源配置,基于default
和replica
配置。 -
DataSource
事件监听器重新配置save()
和delete()
以使用default
连接,并使用find()
使用{*_}replica
连接。
枚举选项
在您的ORM表对象中使用 EnumTrait
,并使用 getEnumOptions()
来读取该表中的枚举字段。
全局辅助函数
config/functions.php
包含全局可用的辅助函数。例如,
- timestamp() => ‘2019-10-03 16:00:00’
- is_assoc([‘key’ => ‘value’]) => true | is_assoc([‘JustValue’]) => false
请求清理
RequestSanitationMiddleware
将所有用户提交字段中的信用卡号码替换为 X
。您可以在中间件中定义有效信用卡字段的列表。
软删除
-
在您希望实现软删除的数据库表中创建可空的
deleted_at
列,数据类型为timestamp
。 -
在您的ORM表对象中使用
SoftDeleteTrait
。或者,您可以bake
ORM表:bin/cake bake model ModelName -t Skeleton
-
如果您希望级联软删除,请将这些选项添加到表关联中。
'cascadeCallbacks' => true, 'dependent' => true
例如,如果您希望删除一个被删除用户的所有文章,在
UsersTable.initialize
中,您的表关联将如下所示:$this->hasMany('Users', [ 'foreignKey' => 'user_id', 'cascadeCallbacks' => true, 'dependent' => true ]);
模板
当您在控制器中使用Crud组件方法来加载数据时,以下变量将在视图中可用。
accessibleFields
用户可分配的字段。(仅在动作是add
或edit
之一时设置)className
当前控制器名称。displayField
当前表对象的显示字段。entity
/entities
仅当您使用后备模板时设置。title
当前页面的用户友好标题。
模板抽象
- 在
/Template/{FallbackTemplateFolder}
中创建模板文件。 - 在控制器中设置
fallbackTemplatePath
选项。
默认情况下,后备模板路径设置为$crud = [ 'fallbackTemplatePath` => {FallbackTemplateFolder} ];
/Template/Common
。 - 从Cake指定的模板文件夹中删除您希望由后备模板覆盖的模板。
示例
- 在
/Template/Admin
中创建index.php
、add.php
、view.php
、edit.php
。 - 在
UsersController
中设置fallbackTemplatePath
选项。$crud = [ 'fallbackTemplatePath` => 'Admin' ];
- 从
/Template/Users
中删除index.php
、view.php
。现在,index
和view
方法将回退到/Admin
中的对应模板,而add
、edit
将使用/Users
中的模板。
视图助手
要加载助手,请在AppView
的initialize()
方法中添加$this->loadHelper('Skeleton.{helperName}');
。
UtilsHelper
实用工具,帮助您编写模板文件。
PhoneHelper
将电话号码解析为用户友好的格式。