首页 > 其他分享 >Yii 动态模型实现思路

Yii 动态模型实现思路

时间:2023-11-02 22:47:56浏览次数:38  
标签:return 模型 Yii 表单 field 思路 model

假设这么一个场景: 有一个通过 Yii ActiveForm 构建的表单,里面所有的字段都是虚拟的,比如说 这个表单的字段来自于一个 JSON 或者说数据库的结果集,需要实现同一个模型,根据不同的传参,构建不同的表单项。

问题: Yii 的表单是通过模型来创建的,也就是说我有这个表单项,模型中必须有对应的字段(成员属性),否则就会报错。且这个成员属性在模型实例化之后是不允许添加的,那么我们如何去动态的添加这些表单项的字段?

解决思路: 既然模型字段都是不存在的,我们干脆用一个虚拟的模型,不是说这个模型文件不存在,而是指模型文件不对应任何实际的数据表。
那么我们只需要在实例化模型的时候,传入动态的字段,然后在对应的 rules()attributes()attributeLabels() 方法里面返回我们的动态字段,就可以实现需要的效果。

模型部分

创建一个虚拟的模型,重写构造方法,传入字段,赋值给成员属性 $field

<?php
namespace app\models;

use Attribute;
use yii\db\ActiveRecord;
class Actor extends ActiveRecord
{
    public $field;
    public function __construct($field)
    {
        $this->field = $field;
        parent::__construct([]);
    }


    public function rules()
    {
        return [
            [$this->field, 'required']
        ];
    }

    public function attributes()
    {
        return $this->field;
    }
}

控制器部分

<?php

namespace app\controllers;

use Yii;
use Yii\base\Controller;
use app\models\Actor;

class TestController extends Controller
{

    public function actionIndex()
    {
        /**
         * 动态创建的字段,在实例化模型的时候传递进去
         * 这里只是为了测试,实际应用的时候可以是从其他途径来的数组:
         *  比如 JSON 动态转换、数据库查询出的结果集等等
         */
        $field = ['username','json','token'];
        $model = new Actor($field);

        if (Yii::$app->request->getIsGet()) {
            return $this->render('index',['model' => $model]);
        }

        // 装载数据
        $model->load(Yii::$app->request->post());
        // 获取模型提交的数据
        var_dump($model->getDirtyAttributes());
    }

}

视图部分

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;

$form = ActiveForm::begin([
    'id' => 'login-form',
    'options' => ['class' => 'form-horizontal'],
]) ?>
    <!-- 遍历模型中的字段 在页面上构建输入框 -->
    <? foreach($model->field as $field) { ?>
        <?= $form->field($model, $field) ?>
    <? }?>
    <div class="form-group">
        <div class="col-lg-offset-1 col-lg-11">
            <?= Html::submitButton('submit', ['class' => 'btn btn-primary']) ?>
        </div>
    </div>
<?php ActiveForm::end() ?>

标签:return,模型,Yii,表单,field,思路,model
From: https://www.cnblogs.com/dbkuaizi/p/17806535.html

相关文章

  • 计算机组成原理-----模型机指令系统寻址方式以及其中部分英语简称介绍
    学校教学中寻址方式有8种,以下是名称与助记符,以及指令流程(以ST为例):1.立即寻址             I  Ri ->MAR,M->MDR->C,Ri+1->Ri           2.寄存器寻址           R3.寄存器简址    ......
  • 循环神经网络 —— LSTM 有状态模型(stateful LSTM)和无状态模型(stateless LSTM)
    相关参考:训练后的LSTM模型在进行预测时的初始h_n和c_n是什么或应该怎么设置?   Keras中对RNN网络的statefull和stateless设置:链接:https://keras.io/zh/getting-started/faq/#how-can-i-use-stateful-rnns   =============================================== ......
  • 【深度学习】PyTorch的基本运算 与 构造简单神经网络模型
    基本运算importtorch#创建一个自定义的张量t=torch.tensor([1.0,2.0,3.0])#tensor([1.,2.,3.])#求平均值t.mean()#tensor(2.)#创建一个指定行列的张量x=torch.empty(3,5)#tensor([[0.,0.,0.,0.,0.],[0.,0.,0.,0.,0.],[0.,0.,0.,0.,0.]......
  • 文心大模型在金融监管科技中的应用价值
    随着人工智能技术的不断发展,自然语言处理技术也在不断进步。其中,信息抽取技术作为自然语言处理的重要组成部分,已经被广泛应用于各个领域。在金融监管科技领域,信息抽取技术的应用同样非常重要。本文将介绍一种基于文心大模型通用信息抽取技术ERNIE-UIE在金融监管科技中的应用。文心......
  • 利用LLM大模型和智能问答BI实现智能报表生成
    随着人工智能技术的不断发展和应用,利用LLM大模型和智能问答BI生成智能报表已成为众多企业和组织的重要工作之一。本文将重点介绍如何利用LLM大模型和智能问答BI生成智能报表,帮助读者更好地理解其中的关键技术和应用实践。一、LLM大模型的应用LLM大模型是指大型语言模型,它代表了人工......
  • 大模型训练中Loss出现NaN的解决策略
    在深度学习中,模型训练时的loss值通常是评估模型性能的重要指标。然而,有时候在训练过程中,loss值可能会出现nan,这可能会导致训练中断或者模型性能下降。本文将探讨导致loss出现nan的原因,以及相应的解决方法。一、原因分析梯度爆炸梯度爆炸是导致loss出现nan的一个常见原因。当梯度在......
  • Transformer与预训练语言模型的探索
    随着人工智能技术的快速发展,大模型系统和应用已经成为自然语言处理和深度学习领域的热门话题。在这篇文章中,我们将重点介绍大模型系统和应用中的两个关键组成部分:Transformer和预训练语言模型。通过阐述这两个概念的相关原理、应用场景以及未来发展趋势,我们希望能够帮助读者更好地......
  • KEIL软件的Error: Flash Download failed - Could not load file '..\OBJ\Template.
    Error:FlashDownloadfailed - Couldnotloadfile'..\OBJ\USART.axf' 解决方案:1重新覆盖安装keil2程序编译存在错误导致 同时开多个KEIL,只有其中一个KEIL可以使用J-LINK,ST-LINK。 ......
  • Attention机制/注意力模型/attention
    视频讲解:https://www.bilibili.com/video/BV1L4411q785?p=3&spm_id_from=pageDriverhttps://www.bilibili.com/video/BV1C7411k7Wg?from=search&seid=17393812710874939428https://www.bilibili.com/video/BV1Nt411N7HN?from=search&seid=17393812710874939428https:......
  • 使用亚马逊云科技大语言模型及搜索服务打造知识库:场景及组件介绍
     背景 知识库需求在各行各业中普遍存在,例如制造业中历史故障知识库、游戏社区平台的内容知识库、电商的商品推荐知识库和医疗健康领域的挂号推荐知识库系统等。为保证推荐系统的实效性和准确性,需要大量的数据/算法/软件工程师的人力投入和包括硬件在内的物力投入。其次,为了进一步......