# 表单行为
### [](https://octobercms.com/docs/backend/forms#extend-form-behavior)扩展表单行为
有时您可能希望修改默认的表单行为,并且有几种方法可以执行此操作。
### [](https://octobercms.com/docs/backend/forms#overriding-action)覆盖控制器动作
您可以使用自己的逻辑`create`,`update`或`preview`操作方法在控制器中,然后任选调用表单行为父类的方法。
~~~
public function update($recordId, $context = null)
{
//
// Do any custom code here
//
// Call the FormController behavior update() method
return $this->asExtension('FormController')->update($recordId, $context);
}
~~~
### [](https://octobercms.com/docs/backend/forms#overriding-redirect)覆盖控制器重定向
您可以通过覆盖`formGetRedirectUrl`方法指定保存模型后重定向到的URL。此方法返回将重定向到的位置,并将相对URL视为后端URL。
~~~
public function formGetRedirectUrl($context = null, $model = null)
{
return 'https://octobercms.com';
}
~~~
### [](https://octobercms.com/docs/backend/forms#extend-model-query)扩展模型查询
可以通过覆盖控制器类内部的方法来扩展针对表单[数据库模型](https://octobercms.com/docs/database/model)的查找查询`formExtendQuery`。通过将**withTrashed**范围应用于查询,此示例将确保仍然可以找到和更新软删除的记录:
~~~
public function formExtendQuery($query)
{
$query->withTrashed();
}
~~~
### [](https://octobercms.com/docs/backend/forms#extend-form-fields)扩展表单字段
您可以通过`extendFormFields`在控制器类上调用static方法从外部扩展另一个控制器的字段。此方法可以使用三个参数,**$ form**将代表Form窗口小部件对象,**$ model**代表表单使用的模型,**$ context**是包含表单上下文的字符串。以这个控制器为例:
~~~
class Categories extends \Backend\Classes\Controller
{
public $implement = ['Backend.Behaviors.FormController'];
public $formConfig = 'config_form.yaml';
}
~~~
使用该`extendFormFields`方法,可以向此控制器呈现的任何表单添加额外的字段。由于这可能会影响此控制器使用的所有表格,因此最好检查\*\*$ model\*\*的类型是否正确。这是一个例子:
~~~
Categories::extendFormFields(function($form, $model, $context)
{
if (!$model instanceof MyModel) {
return;
}
$form->addFields([
'my_field' => [
'label' => 'My Field',
'comment' => 'This is a custom field I have added.',
],
]);
});
~~~
您也可以通过覆盖`formExtendFields`控制器类内部的方法在内部扩展表单字段。这只会影响`FormController`行为使用的形式。
~~~
class Categories extends \Backend\Classes\Controller
{
[...]
public function formExtendFields($form)
{
$form->addFields([...]);
}
}
~~~
在$ form对象上可以使用以下方法。
| 方法 | 描述 |
| --- | --- |
| **addFields** | 将新字段添加到外部区域 |
| **addTabFields** | 将新字段添加到选项卡式区域 |
| **addSecondaryTabFields** | 将新字段添加到辅助选项卡式区域 |
| **removeField** | 从任何区域删除字段 |
每种方法都采用类似于[表单字段配置](https://octobercms.com/docs/backend/forms#form-fields)的字段数组。
### [](https://octobercms.com/docs/backend/forms#filter-form-fields)过滤表单字段
您可以通过覆盖所`filterFields`用模型中的方法来过滤表单字段定义。这使您可以基于模型数据来操纵可见性和其他字段属性。该方法带有两个参数,**$fields**将表示[字段配置](https://octobercms.com/docs/backend/forms#form-fields)已定义的字段的对象,而\*\*$context\*\*表示活动表单上下文。
~~~
public function filterFields($fields, $context = null)
{
if ($this->source_type == 'http') {
$fields->source_url->hidden = false;
$fields->git_branch->hidden = true;
}
elseif ($this->source_type == 'git') {
$fields->source_url->hidden = false;
$fields->git_branch->hidden = false;
}
else {
$fields->source_url->hidden = true;
$fields->git_branch->hidden = true;
}
}
~~~
上面的示例将`hidden`通过检查Model属性的值在某些字段上设置标志`source_type`。第一次加载表单时以及通过[定义的字段依赖项](https://octobercms.com/docs/backend/forms#field-dependencies)更新时,将应用此逻辑。
- 基本说明
- 基本操作
- October cms 安装
- 后台控制器路径
- 图标
- 获取安装网上的插件/主题
- 插件构造器使用
- 定时任务
- October后台控制器
- vscode编辑器
- ajax操作
- 使用
- ajax更新组件
- ajax属性API
- JavaScript API
- ajax综合使用
- 主题
- 多语言主题
- 安装市场主题
- 主题程序处理
- 主题
- 页面
- 部件
- 布局
- 内容
- 组件
- 媒体
- 主题表单操作
- 表单使用
- 表单后端程序处理
- 插件
- 自定义插件
- 插件说明
- 插件导航条
- 插件数据库设置
- 插件的设置管理
- 插件的配置文件config
- 组件
- app服务
- app容器
- 扩展行为
- 缓存
- Collection类
- Lazy Collections
- Collection方法
- 助手函数
- 数组助手函数
- 路径助手函数
- 玄乐助手函数
- 其他助手函数
- 错误与记录
- 事件处理
- HTML页面
- 文件与目录操作
- 散列和加密
- 邮件
- 邮件内容
- 邮件发送
- 分页
- 模板解析器
- 动态解析器语法
- 队列消息
- 请求与输入
- 响应
- 视图
- 路由器
- 配置
- 验证操作
- 处理错误消息
- 错误消息与视图
- 可用的验证规则
- 有条件的验证规则
- 验证数组
- 错误消息
- 自定义验证规则
- 模型操作
- 定义模型与其属性
- 检索模型
- 插入与更新
- 删除模型
- 查询范围
- 事件操作
- 关联操作
- 定义关系
- 关系类型
- 多肽关系
- 关系查询
- 渴望加载
- 插入模型
- 数据库操作
- 基本用法
- 数据表结构
- 查询连贯操作
- 结果检索
- select子句
- 插入更新
- where子句
- 排序,分组,限制和偏移
- 文件附件
- Collection操作
- 属性操作
- 系列化json
- 数据库属性
- 数据库行为
- 控制器
- 后台控制器定义
- 后台页面
- 后台组件
- 后台表单
- 表单组件
- 表单视图
- 表单行为
- 后台列表
- 列表行为
- 列表过滤器
- 可用列类型
- 关系行为
- 关系行为类型
- 扩展关系行为
- 列表排序操作
- 导入导出操作
- 用于与权限
- corlate模板修改
- 修改顶部导航
- laravel问题
- 控制器不存在
- 控制器
- 路由组
- laravel笔记
- laravel 安装
- 伪静态配置
- 依赖注入 & 控制器
- 中间件
- 路由文件
- 视图