OctoberCMS Builder-大量创建模型

时间:2019-05-08 09:43:03

标签: php octobercms octobercms-builder

所以我有一个通过octoberCMS构建器使用“列表”和“表单”视图创建的许可模型。

许可模型与学校模型包含一种关系。

在“表单”视图下,有一个包含学校的下拉列表和一个输入字段(类型=数字),该字段定义了为所选学校创建的许可证数量。

enter image description here

默认行为仅创建1个许可证

如何改为创建输入的许可证数量?

2 个答案:

答案 0 :(得分:0)

您需要覆盖默认行为。

  

注意:该任务需要OctoberCMS的编程知识。

在您的控制器中,您需要添加此方法。

use Flash;
use Backend;

// ...

public function create_onSave($context = null)
{

    // 1. init form for your modal and get input data from it
    $model = $this->asExtension('FormController')->formCreateModelObject();
    $model = $this->asExtension('FormController')->formExtendModel($model) ?: $model;
    $this->asExtension('FormController')->initForm($model);
    $form = $this->asExtension('FormController')->formGetWidget();
    $data = $form->getSaveData();

    // 2. get proper count field here and convert to int for loop 
    $count = intval($data['license_to_create']);

    // 3. validation step
    // if($validationFailed) {
    //    Flash::error('Something Went Wrong.');
    //    return;
    // }

    // 4. loop
    foreach ($i = 1; $i <= $count; $i++) {
        $licenseModel = new LicenseModel;
        // you can add other data
        // you can access $data['school_id'] here
        // $licenseModel->school_id = $data['school_id'];
        $licenseModel->save();
    }

    // 5. success message
    Flash::success($count . ' License Added');

    // 6. just redirect it to desired location 
    return Backend::redirect('/hardiksatasiya/sotest/skills');
}
  

说明

  1. 在这里我们初始化必需的变量,以便我们可以获取填充在文本框中的数据,这是默认代码,因此我只是从核心代码中复制了它。

  2. 一旦有了我们的$ data变量,就可以访问填充数据(在您的情况下,$data['license_to_create']使用的是100,$data['school_id']您需要为其创建许可证的学校), 注意:您可能有不同的字段,请相应更改。

  3. 验证步骤*可选,您可以在此处添加一些检查,并在错误消息不正确的情况下停止流程。

  4. 循环为许可证模式创建新记录,[默认代码将仅创建1条记录],但是这里我们根据给定的计数$data['license_to_create']

  5. 创建它
  6. 只是正常的成功消息。

  7. 重定向到通常需要重定向的位置,您需要将其重定向到/author-name/plugin-name/license-controller 注意:您的网址可能不同,请相应地进行更改。

如有疑问,请添加评论。

答案 1 :(得分:0)

实际上我已经通过为 Licenses 控制器编写自定义的 create_onSave 函数来解决了这个问题:

public function create_onSave(){

    $quantity = post('License[_quantity]');
    $school_id = post('License[school]');

    for($i = 1; $i <= $quantity; $i++){
        # Create License
        $license = new \Acme\Plugin\Models\License();
        $license->school_id = $school_id;
        $license->save();
    }

    \Flash::success('Added '.$quantity.' Licenses');

}