【问题标题】:Extending Yii framework CHtml helper class with our custom class用我们的自定义类扩展 Yii 框架 CHtml 助手类
【发布时间】:2012-09-21 01:12:50
【问题描述】:

我必须将用户输入的数据编码为 utf-8,尤其是数字编码时, 所以我决定用下面的代码sn-p进行编码,然后存入数据库

$convmap = 数组 (0x80, 0xffff, 0, 0xffff); $str = htmlentities (mb_encode_numericentity($str, $convmap, 'UTF-8'),ENT_QUOTES,"UTF-8",false);

但 Yii 默认编码只使用 CHtml::encode() ,它只使用 htmlspecialchars() 函数

所以我决定扩展 CHtml 类来覆盖编码函数,但我不知道如何在 Yii 中做到这一点。 建议扩展 Yii 助手类的好方法...

【问题讨论】:

  • CHtml 是包含所有静态方法的静态类,您不能扩展它。更好地用作黑盒(复合),但 yii 仍然使用CHtml,而不是你的
  • 我希望在 Yii 中为核心助手提供类似 Kohana 的扩展功能,bec。 CHtml 与 Yii 核心紧密耦合,在将数据保存到 db 或从 db 查询时进行编码

标签: php mysql utf-8 yii encode


【解决方案1】:

你不能完全做到这一点,这个类紧密集成在框架中。 (即用于小部件、activaeform 等...),

您可以做的一件事是……扩展它并创建您的类并在您的整个应用程序中使用它。在将模型数据发送到视图/小部件之前对其进行预处理。

【讨论】:

    【解决方案2】:

    您总是可以在/framework/web/helpers/CHtml.php 中编辑 CHtml 类本身,为编码方法添加一个额外的参数?例如;

    public static function encode($text,$extraEncode=false)
    {
        if($extraEncode===true)
        {
            $convmap = array ( 0x80, 0xffff, 0, 0xffff );
            return htmlentities ( mb_encode_numericentity( $text, $convmap, 'UTF-8' ),ENT_QUOTES,"UTF-8",false );
        } else {
            return htmlspecialchars($text,ENT_QUOTES,Yii::app()->charset);
        }
    }
    

    obv,根据口味编辑。

    那你可以像CHtml::encode($myString,true)这样称呼它

    【讨论】:

    • 好像要编辑Yii核心系统,但是我不想编辑Yii核心,不接触Yii核心系统,给个解决方案。我从中得到了提示
    • 你不能扩展一个类来包含一个编码函数来覆盖CHtml方法,就像你可以覆盖很多控制器/模型方法(例如$this->beforeSave()),CHTML编码函数被静态调用了很多,这意味着您必须编辑核心文件,如果完成,我看不到这个问题,因此它不会影响该方法的原始使用,但是如果您反对这样,您始终可以完全独立地创建自己的编码方法并调用您的方法(MyClass::encode($myText) 而不是 CHtml 方法(CHtml::encode($myText))?
    • 刚找到这个,这是一种解决方法……目前,希望他们将来会扩展 yii 以获得更好的解决方案:yiiframework.com/forum/index.php/topic/…
    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多