执行顺序:

_显示:_editBefore(控制器,保存时也会执行) → createEditFetchDataBefore(控制器) → setEditShowDo(字段) → beforeAddShow/beforeEditShow(控制器)

_保存:_setPostDataBefore(控制器) →editBefore(控制器,显示时也会执行) → setSaveBeforeDo(字段) → doSaveDataBefore(模型) → doSaveDataAfter(模型) → setSaveBeforeCheckedDo(字段) → setSaveAfterDo(字段) → onAddAfter/onEditAfter(模型) → addAfter/editAfter(控制器))

方式1:控制器事件

  1. <?php
  2. namespace app\controller;
  3. use app\BaseController;
  4. use tpScriptVueCurd\base\model\BaseModel;
  5. use tpScriptVueCurd\FieldCollection;
  6. class User extends BaseController
  7. {
  8. use \tpScriptVueCurd\base\controller\Controller;
  9. public function init(): void
  10. {
  11. $this->title='人员信息';
  12. $this->md=\app\model\User::make($this);
  13. }
  14. /*******************事件执行顺序按照以下方法排列顺序执行********************/
  15. /**
  16. * 数据添加或修改时,《显示》与《提交》都会执行此方法
  17. * @param FieldCollection $fields
  18. * @param BaseModel $old 修改前数据信息
  19. * @param BaseModel|null $parentInfo 父表数据
  20. * @param array|null $data 提交上来的数据
  21. * @return void
  22. */
  23. protected function editBefore(FieldCollection &$fields,BaseModel $old,?BaseModel $parentInfo,?array &$data=null): void
  24. {
  25. if(empty($old->id)){
  26. //新增
  27. }else{
  28. //修改
  29. }
  30. }
  31. /**
  32. * (添加/编辑页面)生成解析数据前(页面打开时),处理数据(控制字段显示与否),empty($data->id)代表是新增
  33. * @param FieldCollection $fields
  34. * @param BaseModel $data
  35. * @param BaseModel|null $baseModel 父表数据
  36. * @return void
  37. */
  38. protected function createEditFetchDataBefore(FieldCollection $fields, BaseModel &$data,?BaseModel $baseModel):void
  39. {
  40. // throw new \think\Exception('此处使用throw抛出异常表示阻止页面打开');
  41. //这里也可更字段的显示,也可更改数据显示的值
  42. $fields->findByName('name')->title('更改了姓名的标题');
  43. $data['name']='展示时将姓名改变了,或设置了默认值';
  44. }
  45. /**
  46. * 添加页面展示时
  47. * @param array $fetchData 返回前台需要的数据,可在此处改变
  48. * @return array
  49. */
  50. protected function beforeAddShow(array $fetchData):array{
  51. return $fetchData;
  52. }
  53. /**
  54. * 修改页面展示时
  55. * @param array $fetchData 返回前台需要的数据,可在此处改变
  56. * @return array
  57. */
  58. protected function beforeEditShow(array $fetchData):array{
  59. //数据修改页面 解析前
  60. return $fetchData;
  61. }
  62. protected function setPostDataBefore(array &$post):void{
  63. //用户提交的数据处理
  64. }
  65. /**
  66. * 数据添加成功后
  67. * @param BaseModel $info 添加成功后的数据对象
  68. * @return void
  69. */
  70. protected function addAfter(BaseModel $info): void
  71. {
  72. }
  73. /**
  74. * 数据修改成功后
  75. * @param BaseModel $info 修改成功后的数据对象
  76. * @return void
  77. */
  78. protected function editAfter(BaseModel $info): void
  79. {
  80. }
  81. }

方式2:模型事件


<?php
namespace app\model;
use tpScriptVueCurd\base\model\BaseModel;
use tpScriptVueCurd\field\RadioField;
use tpScriptVueCurd\field\StringField;
use tpScriptVueCurd\FieldCollection;

class User extends BaseModel
{

    /**
     * 表字段配置
     * @return FieldCollection
     */
    public function fields(): FieldCollection
    {
        return new FieldCollection([
            StringField::init('name','姓名'),
            RadioField::init('sex', '性别'),
        ]);
    }

    /*******************事件执行顺序按照以下方法排列顺序执行********************/

    /**
     * 提交的数据被验证之前执行
     * @param FieldCollection $fields
     * @param array $postData
     * @param bool $isExcelDo
     * @param int $id id为0代表添加,否则为修改
     * @param BaseModel|null $parentInfo
     * @param BaseModel $beforeInfo
     * @return void
     */
    protected function doSaveDataBefore(FieldCollection $fields, array &$postData, bool $isExcelDo, int $id, ?BaseModel $parentInfo, BaseModel $beforeInfo): void
    {
        parent::doSaveDataBefore($fields, $postData, $isExcelDo, $id, $parentInfo, $beforeInfo);
    }

    /**
     * 提交的数据被验证之后执行
     * @param array $saveData
     * @param int $id id为0代表添加,否则为修改
     * @param BaseModel|null $parentInfo
     * @param BaseModel $beforeInfo
     * @return void
     */
    protected function doSaveDataAfter(array &$saveData, int $id, ?BaseModel $parentInfo, BaseModel $beforeInfo): void
    {
        parent::doSaveDataAfter($saveData, $id, $parentInfo, $beforeInfo);
    }


    /**
     * 添加成功后执行
     * @param BaseModel $info
     * @param array $postData
     * @param BaseModel|null $parentInfo
     * @return void
     */
    protected function onAddAfter(BaseModel $info, array $postData, ?BaseModel $parentInfo): void
    {
        parent::onAddAfter($info, $postData, $parentInfo);
    }

    /**
     * 修改成后执行
     * @param BaseModel $info
     * @param array $postData
     * @param BaseModel|null $parentInfo
     * @param BaseModel $beforeInfo
     * @return void
     */
    protected function onEditAfter(BaseModel $info, array $postData, ?BaseModel $parentInfo, BaseModel $beforeInfo): void
    {
        parent::onEditAfter($info, $postData, $parentInfo, $beforeInfo);
    }
}

方式3:字段事件

<?php
namespace app\model;
use tpScriptVueCurd\base\model\BaseModel;
use tpScriptVueCurd\field\RadioField;
use tpScriptVueCurd\field\StringField;
use tpScriptVueCurd\FieldCollection;
use tpScriptVueCurd\ModelField;

class User extends BaseModel
{

    /**
     * 表字段配置
     * @return FieldCollection
     */
    public function fields(): FieldCollection
    {
        $sexField=RadioField::init('sex', '性别');
        /*******************事件执行顺序按照以下方法排列顺序执行********************/
        $sexField->pushFieldDo()
            ->setEditShowDo(function (BaseModel &$info,?BaseModel $base,ModelField $field,bool $isStepNext){
                //empty($before->id)表示新增,否则是修改
                //页面显示时,此字段将会执行
            })
            ->setSaveBeforeDo(function (array &$postData,BaseModel $before,?BaseModel $base,ModelField $field){
                //empty($before->id)表示新增,否则是修改
                //数据保存前,此字段将会执行
            })
            ->setSaveBeforeCheckedDo(function (array &$saveData,BaseModel $before,?BaseModel $base,ModelField $field){
                //empty($before->id)表示新增,否则是修改
                //数据保存前,且字段验证前,此字段将会执行
            })->setSaveAfterDo(function (array $saveData,BaseModel $before,BaseModel $after,?BaseModel $base,ModelField $field){
                //empty($before->id)表示新增,否则是修改
                //数据保存后,此字段将会执行
            });


        return new FieldCollection([
            StringField::init('name','姓名'),
            $sexField,
        ]);
    }
}