伊2。动态添加属性和规则到模型

2024-06-22

我正在编写一个小部件,我想避免用户向他们的模型添加代码(我知道这会更容易,但用它来学习新东西)。

您是否知道是否可以向模型添加一个属性(该属性不在您的数据库中,因此它将是虚拟的)并为该属性添加规则?您无权更改该模型代码。

我知道规则是一个数组。过去我使用 array_merge 合并了父类中的规则。可以从外部做吗? Yii2 有方法吗?

一个想法是使用我的小部件中的“模型”来扩展用户提供的模型,并在那里使用:

    public function init() {
      /*Since it is extended this not even would be necessary, 
      I could declare the attribute as usual*/

      $attribute = "categories";
      $this->{$attribute} = null; //To create attribute on the fly

      parent::init();
    }

    public function rules() {
      $rules = [...];

      //Then here merge parent rules with mine.
      return array_merge(parent::rules, $rules);
    }

但是如果我扩展它,当我在 ActiveForm 中使用该模型作为复选框时,它将使用我的“CustomModel”,所以我想避免这种情况。还有其他想法吗?如何在不扩展模型的情况下做到这一点?


将动态属性添加到现有模型

当您想要在运行时向现有模型添加动态属性时。然后你需要一些自定义代码,你需要:一个模型类和一个扩展类,它将执行动态部分,并且有数组来保存动态信息。这些数组将在所需的函数中与模型类的返回数组合并。

这是一种模型,它不能完全工作。但也许你知道你需要做什么:

class MyDynamicModel extends MyNoneDynamicModel
{

private $dynamicFields = [];
private $dynamicRules = [];

public function setDynamicFields($aryDynamics) {
     $this->dynamicFields = $aryDynamics;
}

public function setDynamicRules($aryDynamics) {
     $this->dynamicRules = $aryDynamics;
}

public function __get($name)
{
    if (isset($this->dynamicFields[$name])) {
        return $this->dynamicFields[$name];
    }

    return parent::__get($name);
}

public function __set($name, $value)
{
if (isset($this->dynamicFields[$name])) {
  return $this->dynamicFields[$name] = $value;
}
return parent::__set($name, $value);
}

public function rules() {
  return array_merge(parent::rules, $this->dynamicRules);
}
}

全动态属性

当所有属性都是动态的并且您不需要数据库时。然后使用新的动态模型 http://www.yiiframework.com/doc-2.0/yii-base-dynamicmodel.htmlYii2.该文件还指出:

DynamicModel 是一个模型类,主要用于支持临时数据验证。

这里有一个完整的表单集成示例 http://www.yiiframework.com/wiki/759/create-form-with-dynamicmodel/来自 Yii2-Wiki,所以我在这里不做例子。

虚拟属性

当您想要向模型添加数据库中不存在的属性时。然后只需在模型中声明一个公共变量:

public $myVirtualAttribute;

然后您可以像其他(数据库)属性一样在规则中使用它。

To do 大量作业 http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#massive-assignment不要忘记在模型规则中添加安全规则:

public function rules()
{
    return [
        ...,
        [['myVirtualAttribute'], 'safe'],
        ...
    ];
}

其原因在这里得到了很好的解释:Yii2 非数据库(或虚拟)属性在大规模分配期间未填充? https://stackoverflow.com/a/35547796/842330

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

伊2。动态添加属性和规则到模型 的相关文章

  • SQLite适合并发读吗?

    在没有锁定的情况下 SQLite 数据库的性能是否能达到每秒 50 次读取左右 我正在尝试确定它是否可以在不会经常 写入 的 PHP 网站上使用 它主要是从一小部分表中读取相同的数据 没问题 并发读 写实际上会被 SQLite 序列化 所以
  • PHP 中的随机排列对象

    如何在 PHP 中对对象进行排序 我试过shuffle 但这需要一个数组 Warning shuffle expects parameter 1 to be array object given in var www index php o
  • PHP:系统时区设置错误

    我尝试在 MAMP 下的终端中使用 PHP 但出现与系统时区设置相关的错误 我该如何修复这个错误 应用程序 MAMP bin php5 bin php 回声 php PHP 严格标准 PHP 启动 它 依赖系统是不安全的 时区设置 请使用
  • 是否可以倒回 PDO 结果?

    我正在尝试为 PDO 语句的结果编写一个迭代器 但找不到任何回退到第一行的方法 我想避免调用 fetchAll 和存储所有结果数据的开销 first loop works fine foreach statement as result d
  • cURL 错误 28:5001 毫秒后解析超时

    我使用 WordPress 最近将我的网站从 cpanel 主机移动到带有 directadmin 面板的 Linux 服务器 转账后立即发现客户在通过EDD插件下载时出现以下错误 cURL 错误 28 5001 毫秒后解析超时 我也遇到了
  • 上传并 POST 文件到 PHP 页面

    我需要一种上传文件并将其 POST 到 php 页面的方法 php 位于 apache 服务器上 我在我的桌面应用程序中使用这个 C 代码 这是一个c代码的套接字 当我执行程序时 可以得到 文件大小为772906 打开服务器正常 文件大小为
  • 如何使用 OOP 从另一个 .php 到另一个 .php 的类使用 $db?

    我是 OOP PHP 的新手 自从开始 Web 开发以来我一直在使用过程 API 所以我很难迁移到 OOP 假设我有这四个 php文件和结构如下 连接 db php
  • MySQL:删除包含特定参数且早于一天的行[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 mysql 为我的网站创建一个登录系统 它在基于订阅的系统上运行 如果参数 premium 等于 1 DAY 如果它早于一
  • 为什么 Laravel 即使在本地环境也会重定向到 https?

    我正在开发 Laravel 5 5 版本 我有一个需要域才能执行的应用程序 这就是为什么 我在我的中添加了以下条目 etc hosts文件 以便我可以使用以下域打开我的应用程序仪表板 应用程序 dev or api application
  • 替换字符串中的重复字符串

    我正在尝试查找 并替换 字符串中重复的字符串 我的字符串可以是这样的 Lorem ipsum dolor 坐阿梅特坐 阿梅特坐 阿梅特坐诺斯特鲁德实习amit situllamco Laboris nisi ut aliquip ex ea
  • 正则表达式多次匹配多行

    我有一个像这样的字符串 Name John Doe Age 23 Primary Language English Description This is a multiline description field that I want
  • Codeigniter 未连接到 SQL Server

    我正在尝试使用 CodeIgniter 连接到 SQL 服务器 如果我使用 sqlsrv 驱动程序 我会收到致命错误消息 如果我使用 odbc 驱动程序 我会收到 无法使用提供的设置连接到数据库服务器 错误消息 有谁知道如何解决这个问题 我
  • Laravel 使用 Monolog\Handler\BrowserConsoleHandler 进行日志记录

    How can 拉拉维尔 5的日志记录更改为Monolog Handler BrowserConsoleHandler What doesn t在 Laravel 5 中工作但是does在独立的 PHP 文件中工作 use Illumina
  • 无法从 localhost/xampp 发送邮件

    无法连接到 mail google com 端口 587 上的邮件服务器 请验证您的 SMTP 和 smtp port 设置php ini or use ini set 我将 xampp php ini 和 sendmail ini 文件配
  • WordPress 中的多词搜索不显示搜索结果

    我自定义了一个主题 但在使用多词查询的搜索结果时遇到一些问题 网站上线时间为www aetterworldbydesign com http abetterworldbydesign com 搜索单个单词 http www abetterw
  • PHP 数组比较

    如何比较两个数组 例如我有array a b c and array a c b 当它们进行比较时 它会返回 true 但如果其中一个字母没有在其中之一中找到 它将返回 false 顺序并不重要 在比较之前 您需要将两个数组的内容调整为相同
  • YouTube API 观看私人视频

    我有一个具有草稿模式的网站 有人可以登录并查看该网站的外观 以便在公众看到该网站之前批准该网站 我在一个帐户上有一些 YouTube 视频 但我将其设为私人帐户 因为我不想让全世界看到它们 不过 我确实希望登录草稿模式的人能够观看私人嵌入内
  • 在cakephp中调用函数

    public function data if old status prev lat lat prev long long if status Village Unknown exec query else if status Town
  • UNION SELECT - 循环?还是单个查询?

    如果我使用 UNION 从数据库中进行多个 SELECT 是否被视为一个查询 或多个查询 SELECT column name s FROM table1 UNION SELECT column name s FROM table2 这是否
  • PayPal REST API:通过重定向 URL 或 Webhook 调用履行订单/付款?

    我正在致力于将 PayPal REST API 集成到我的 Symfony 2 Web 应用程序中 我不确定完成订单 付款的正确时间 地点 与金额 客户数据等其他参数一起 我将两个 URL 传输到 PayPal API 一个是接受付款时用户

随机推荐

  • 如何在主屏幕等视图之间切换

    如何在多个之间切换UIView正在使用一个UIViewController就像 iPhone 主屏幕一样 如果您需要澄清 请询问 请不要拒绝 使用 UIScrollView this http developer apple com iph
  • 使用 JavaScript 更改元素的 `innerHTML`

    好的 我是 JavaScript 新手 但我正在尝试更改innerHTML of a div元素 这是我的脚本不起作用 div change div 它应该可以工作 但由于某种原因没有 有什么帮助吗 而不是分配var1 to window
  • 如何通过 Get-AzureRmAppServicePlan 检索workerSize

    通过 Azure PowerShell cmdlet 创建新的 AppServicePlan 时New AzureRmAppServicePlan 预计我会添加一个WorkerSize例如小号 中号或大号 例如 appServicePlan
  • 使用前置摄像头拍摄图像,无需在android中打开相机应用程序[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想使用 Android 手机的前置
  • 如何捕获退出 Winforms 应用程序的事件?

    如果用户想通过单击退出图标或按 ALT F4 退出应用程序 我想创建一个对话框 询问用户是否确实确定要退出 如何在应用程序实际关闭之前捕获此事件 查看关闭时 http msdn microsoft com en us library sys
  • ANDROID 上的磁场传感器校准

    我正在制作一个用作指南针的应用程序 我使用加速度计和磁场传感器来计算方位角 sensor getOrientation 我正在寻找可以提高磁场传感器精度的东西 因为我得到的精度状态是不可靠的 有人知道这件事吗 我正在寻找一些可以硬编码的东西
  • Java错误:表达式的非法开始

    我基本上正在完善 完成并尝试从 Java 初学者的参考书中编译测试代码 目标是创建一个猜谜游戏 其中目标位于 3 个连续的单元格中 我将位置保存在一个数组中 并且用户猜测单元格号 逐个细胞地摧毁目标细胞 我在这里查看了六篇关于同一错误的帖子
  • 如何获取 std::wstring 的字节大小?

    我在用std wstring作为我的 Unicode 样式字符串 现在我想得到 a 的字节大小wstring 如果我使用size 的方法wstring 我只得到字符总数 在我的wstring 但字节应该是 size 2 有没有官方的方法来获
  • 我可以阻止修改 Python 中的对象吗?

    我想控制全局变量 或全局范围的变量 使其在程序初始化代码中仅设置一次 然后锁定它们 我使用 UPPER CASE VARIABLES 作为全局变量 但我想有一个确定的方法来不更改变量 python 是否提供该 或类似 功能 如何控制全局范围
  • PHP:在 AJAX/JSON 中提交表单时出现问题?

    目前我有以下代码 home php
  • 使用亚马逊步骤函数,如何编写引用当前时间的选择运算符?

    在 aws step 函数中文档 http docs aws amazon com step functions latest dg amazon states language choice state html amazon state
  • 2012 年推荐的 jQuery 模板? [复制]

    这个问题在这里已经有答案了 jQuery 模板已被弃用一段时间了 我有一些 JavaScript 对象形式的数据 我想将其格式化为 HTML 并附加到 DOM 如今最好的方法是什么 我应该构建一个 HTML 字符串吗 我应该通过 jQuer
  • 我可以使用 EnableStatic 来配置 IPv6 地址(使用 WMI)吗?

    我想使用 WMI C 语言 来配置静态 IPv6 地址 配置静态 IPv4 地址可以正常使用EnableStatic 它是名为的 WMI 类的一部分Win32 NetworkAdapterConfiguration 谁能帮我使用 WMI 配
  • Spring Data 存储库实际上是如何实现的?

    我在项目中使用 Spring Data JPA 存储库已经有一段时间了 我知道以下几点 在存储库接口中 我们可以添加类似的方法findByCustomerNameAndPhone 假设customerName and phone是域对象中的
  • IIS 6 上的 elmah

    我有一个网站 上面运行着 elmah 记录到一个 sql 框 在我的测试环境中 它是一台 IIS 7 机器 一切运行良好 当我上传到运行 IIS 6 的网络解决方案 Web 时 出现错误 SecurityException Request
  • 在 x86-64 多核机器上以 C++ Atomic 读取和写入 int

    我读了this https stackoverflow com questions 5002046 atomicity in c myth or reality 我的问题很相似但又有些不同 请注意 我知道 C 0x 不能保证这一点 但我特别
  • 将 yyyy-mm-dd 转换为 dd mm yyyy

    如何将 2013 06 24 转换为 2013 年 6 月 24 日 我正在使用下面的代码 date1 2013 06 24 SimpleDateFormat d new SimpleDateFormat dd MMM yyyy try d
  • Cordova 不创建 AndroidManifest.xml

    我正在 Cordova 和 AndroidStudio 中创建 Android iOS 应用程序 一切都工作正常 直到我昨天将 Cordova 更新到 8 我还将 Node 更新到了最新版本 当我创建 Cordova 项目并添加 Andro
  • 如何使用 Java 10、Ant 和 Eclipse 编译器编译此代码?

    我正在尝试使用 Java 10 Ant 和 Eclipse 编译器编译这个简单的代码 import java util ArrayList import javax xml bind JAXBException class Test voi
  • 伊2。动态添加属性和规则到模型

    我正在编写一个小部件 我想避免用户向他们的模型添加代码 我知道这会更容易 但用它来学习新东西 您是否知道是否可以向模型添加一个属性 该属性不在您的数据库中 因此它将是虚拟的 并为该属性添加规则 您无权更改该模型代码 我知道规则是一个数组 过