какова цель компонента (класса) в Yii - PullRequest
1 голос
/ 14 сентября 2011

Я не понимаю элемент Component , используемый в Yii FW.
Есть ли конкретный (реальный) пример, почему я должен использовать это?

1 Ответ

5 голосов
/ 14 сентября 2011

Каркас состоит из компонентов. Базовый класс для компонентов Yii - это CComponent, который в основном является базовым классом всего в Yii. Компоненты могут быть загружены «на лету» в коде или при запуске в конфигурации. Вы можете прочитать больше об этом на Руководство Yii

Пример из реальной жизни. Если вы хотите построить дом, вам нужен какой-то тип материала для него, поэтому эти кирпичи или бревна будут вашими компонентами. Вы можете делать из них разные типы, но в основном они поддержат ваш дом и придадут ему необходимые функции.

Вот вам пример компонента 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()

Это возможно, поскольку каждый подкласс CComponent в Yii дает вам возможность использовать поведения, события, методы получения и установки и многое другое.

...