1

我不明白Yii FW 中使用的组件。
是否有一个具体的(现实生活)示例为什么我应该使用它?

4

1 回答 1

5

框架由组件组成。Yii 组件的基类是 CComponent,它基本上是 Yii 中所有东西的基类。组件可以在代码中“即时”加载,也可以在配置中加载。你可以在Yii Guide阅读更多关于它的信息

现实生活中的例子。如果你想建造一座房子,你需要某种材料,所以这些砖块或原木将成为你的组件。您可以制作不同类型的它们,但基本上它们将维持您的房屋并为其提供所需的功能。

这里有一个 Yii 组件的例子:

class Y extends CComponent
{
    /**
    * Returns the images path on webserver
    * @return string
    */
    public static function getImagesPath()
    {
        return Yii::app()->getBasePath().DIRECTORY_SEPARATOR.'images';
    }
}

现在我可以使用这个类来检查我的应用程序使用的资源:$y = new Y; $y->stats(); 另外,如果我创建一个特殊的 CBehavior 子类:

class YBehavior extends CBehavior {
        /**
         * Shows the statistics of resources used by application
         * @param boolean $return defines if the result should be returned or send to output
         * @return string
         */
        public function stats($return = false)
        {
            $stats = '';
            $db_stats = Yii::app()->db->getStats();
    
            if (is_array($db_stats)) {
                $stats = 'Requests completed: '.$db_stats[0].' (in '.round($db_stats[1], 5).' sec.)<br />';
            }
    
            $memory = round(Yii::getLogger()->memoryUsage/1024/1024, 3);
            $time = round(Yii::getLogger()->executionTime, 3);
    
            $stats .= 'Memory used: '.$memory.' Mb<br />';
            $stats .= 'Time elapsed: '.$time.' сек.';
    
            if ($return) {
                return $stats;
            }
    
            echo $stats;
        }
}

然后将此行为应用于我的组件:$y->attachBehavior('ybehavior', new YBehavior); 现在我可以将方法 stats 与我的 Y 类一起使用: $y->stats()

这是可能的,因为 Yii 中的每个 CComponent 子类都为您提供了使用行为、事件、getter 和 setter 等等的可能性。

于 2011-09-14T10:32:55.173 回答