-1

因此,我通过 octoberCMS 构建器创建了一个带有列表和表单视图的许可证模型。

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

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

在此处输入图像描述

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

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

4

2 回答 2

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. 重定向我们需要正常重定向的地方您需要将其重定向到/author-name/plugin-name/license-controller 注意:您可能有不同的网址,请相应更改。

如果您有任何疑问,请添加评论。

于 2019-05-10T04:58:36.910 回答
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');

}
于 2019-05-10T08:17:17.250 回答