Показаны сообщения с ярлыком Yii. Показать все сообщения
Показаны сообщения с ярлыком Yii. Показать все сообщения

суббота, 16 марта 2013 г.

Yii + PHPUnit + PhpStorm

В иерархии папок web-приложения Yii есть папка webroot/protected/tests/unit для создания unit-тестов.
Для того чтобы тесты работали по мимо PHPUnit должен быть установлен PHPUnit_Selenium и быть запущен Selenium Server.
Как установить PHPUnit и PHPUnit_Selenium написано в предыдущем посте.
Для настройки проекта для тестирования в PhpStorm, нужно создать PHPUnit конфигурацию, в которой:
  • DirectoryC:\www\casade\casade2\protected\tests\unit.
  • Поставить галочку Use alternative configuration file и выбрать в качестве конфигурационного файла  webroot/protected/tests/phpunit.xml.

вторник, 12 марта 2013 г.

Yii: Использование CClientScript

Класс-компонент CClientScript предназначен для подключения js-скриптов и css-стилей.
По умолчанию доступ к нему осуществляется через Yii::app()->clientScript.
Компонент содержит свойство packages, с помощью которого можно формировать пакеты скриптов, через конфигурационный файл делается это так:
'components' => array( 
    'clientScript' => array(
        'packages' => array(
            'item' => array(
                'basePath'=>'application.assets'
                'js' => array('js/item.js'),
                'depends' => array('jquery'),
            ),
            'filter' => array(
                'basePath'=>'application.assets'
                'js' => array('js/filter.js'),
                'depends' => array('jquery'),
            ),
        ),
    ),
),
Тут создается 2 пакета - item и filter. В приведенном примере используется свойство 'basePath' равное 'application.assets'. Это значит что скрипт item.js хранится в папке protected/assets/js/. При обращении происходит публикация этих ресурсов и на странице мы увидим обращение к опубликованному скрипту /assets/d03789dg/js/item.js.
Вместо свойства 'basePath' можно использовать 'baseUrl', при этом конечный URL скрипта будет <baseUrl>/js/item.js.

Подключаются они во вьюшке так:
Yii::app()->clientScript->registerPackage('item');

Статья по теме, из нее и взяты фрагменты кода.

Yii: как работать с AssetManager

AssetManager предназначен для публикации файлов js, css, png и др. ресурсы в папке webroot/asserts/.

Сделано это для того, чтобы различные модули могли безбоязненно размещать свои ресурсы, не боясь что заменял ресурсы других модулей -- для каждого модуля создается отдельная подпапочка с ресурсами.

Публикация выполняется методом AssetManager::publish($path), где $path - путь к папке с ресурсами которые нужно опубликовать.

Часто для публикации ресурсов и последующего доступа к ним, в базовый класс контроллера добавляют свойство getAssetsUrl():

class Controller extends CController
{
   private $_assetsUrl;
   public function getAssetsUrl() {
       if ($this->_assetsUrl === null) {
           $this->_assetsUrl = Yii::app()->assetManager->
               publish(Yii::getPathOfAlias('application.assets'));
       }
       return $this->_assetsUrl;
   }
}
UPDATE Не знаю для чего создавать временную переменную, т.к. внутри метода publish тоже есть проверка о публикации.

И во вьющке используют это свойство так:
<link rel="stylesheet" type="text/css" href="<?=$this->assetsUrl?>/css/main.css" />

Вот статья по теме на хабре.