因此,我通过 octoberCMS 构建器创建了一个带有列表和表单视图的许可证模型。
许可模型包含与学校模型的一种关系。
在表单视图下,有一个包含学校的下拉列表和一个输入字段(类型=数字),该字段定义为所选学校创建的许可证数量。
默认行为仅创建 1 个许可证
如何创建输入的许可证数量?
因此,我通过 octoberCMS 构建器创建了一个带有列表和表单视图的许可证模型。
许可模型包含与学校模型的一种关系。
在表单视图下,有一个包含学校的下拉列表和一个输入字段(类型=数字),该字段定义为所选学校创建的许可证数量。
默认行为仅创建 1 个许可证
如何创建输入的许可证数量?
您需要覆盖默认行为。
注意:此任务需要 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');
}
解释
在这里,我们初始化所需的变量,以便我们可以获取填充在文本框中的数据,这是默认代码,所以我只是从核心代码中复制了它。
一旦我们有了 $data 变量,我们就可以访问我们$data['license_to_create']
在您的案例中使用的填充数据,它是 100,以及 $data['school_id']
您需要为哪所学校创建许可证,
注意:您可能有不同的字段,请相应地更改。
验证步骤 *可选,您可以在此处添加一些检查并在出现错误消息时停止流程。
循环为许可证模式创建新记录,[默认代码将仅创建 1 条记录],但这里我们根据给定计数创建它$data['license_to_create']
只是正常的成功消息。
重定向我们需要正常重定向的地方您需要将其重定向到/author-name/plugin-name/license-controller
注意:您可能有不同的网址,请相应更改。
如果您有任何疑问,请添加评论。
好吧,实际上我已经通过为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');
}