【问题标题】:How to override the Yii core functionality?如何覆盖 Yii 核心功能?
【发布时间】:2015-09-25 13:37:19
【问题描述】:

我是 Yii 的新手,实际上问题是,很多时候我都面临着像非对象错误这样的问题。

这是由于关系而发生的。即,例如,我们有两个表,称为患者和设施,要在管理页面中显示数据,我们必须映射这两个表并在那里显示记录。现在,当我们删除任何一条匹配记录的患者表非对象错误的设施 id 时。

我不知道,yii 是否是基于数据库关系创建的,但是 yii 关系通常像左连接一样工作,即使与核心 mysql 概念相比,左连接给出的结果是准确的结果,比如设施表值是 null 而不是值时它们不是匹配的记录。

但是在 yii 的情况下,这不会创建设施数组,即使是空的字段名称,这就是为什么会抛出非对象错误,要解决这些错误,我们有 yii 框架本身的解决方案吗?

否则我有一个想法来解决这个问题,必须找到在 yii 上构建这些连接的文件,而不是空数组,我们可以填充表结构(即字段名称为 null 或空值),然后数据将是显示为空,以便我们修复此类错误。

任何人都可以告诉我必须在哪里找到该文件以及我必须在哪里触摸代码?

提前致谢

例如:

我需要这样的

patient => 
        id=>1
        name=>venkat
        facilityid=> 1
        facility=> array(
                            'id'=>''
                            'facilityname'=>''
                        )

代替

patient => 
        id=>1
        name=>venkat
        facilityid=> 1
        facility=> array(

                        )

【问题讨论】:

  • 您是否考虑过引入一些简单地检查值是否为空数组的逻辑?例如:if( empty( $patient->facility ) ) { // do something }?你不应该修改 Yii 的核心。
  • 是的,我们可以这样做,但是最好的框架之一在 yii 本身没有解决方案?或者我认为这可能是错误,从开发人员的角度来看,这有些困难。
  • 如果我们必须在一个地方更改它会被治愈而不是检查每个文件,如果没问题,请告诉我解决方案。
  • @venkat。解决方案不会在框架中,尽其所能。该框架将关系的对象视图作为 PHP 构造提供(例如 $patient->facility)。是不存在的,任何框架都无法创造价值。确保您正确访问该值取决于您。因此,visevo 的评论是正确的。

标签: php mysql yii


【解决方案1】:

如果关系不存在,它会为 HAS ONE 返回一个空值,为 HAS MANY 类型返回一个空数组。您应该使用它来检查关系是否存在,而不仅仅是期望它包含一个空的相关模型或空相关模型的数组。

如果您想更改核心功能的行为,请扩展任何核心类,覆盖必要的方法并改用该类。在这种情况下,我认为您可能需要处理 CActiveRecord 类,弄清楚它如何调用关系(可能使用 __get() 魔术方法)并重写它。我认为这不仅仅是检查关系是否存在(而且您可能还会在此过程中搞砸其他事情)。

【讨论】:

    【解决方案2】:

    如果您需要此功能,为什么不在您的模型和 ActiveRecord 类之间放置一个类并覆盖该函数以适应您的编码风格?

    无需更换核心

    【讨论】:

      猜你喜欢
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多