Создание и сопровождение сайтов

Блог. Yii. Подсказки по yii. Глава первая.

Поиск

Прибавил к названию "Глава первая" так как, надеюсь, не последняя.

В ходе разработки продукта встречается много непонятных моментов, для решения которых используется Google или умные слова коллег, либо вчитывание в мануалы.

Хотелось бы помочь и сэкономить ваше время, если вдруг столкнётесь с такими же проблемами в будущем.

  1. Самое главное – это, пожалуй, поддержка функций автозавершения кода Yii в IDE:

    На примере NetBeans:

    Правой клавишей мыши по названию проекта, в контекстном меню выбрать "Properties" (в самом низу).
    В появившемся окне вкладка Php include path,в ней кликнуть по кнопке “Add folder” и указать путь к папке "framework".

    netbeans include path

  2. Замена привыкшему использованию массивов $_REQUEST, $_POST, $_GET:

    $request = Yii::app()->request;

    Вместо $param = isset($_REQUEST['id']) ? $_REQUEST['id'] : 1; теперь нужно использовать $param = $request->getParam('id', 1);

    Вместо $param = isset($_GET['id']) ? $_GET['id'] : null; - $param = $request->getQuery('id');

    Вместо $param = isset($_POST['id']) ? $_POST['id'] : 1; - $param = $request->getPost('id', 1);

  3. Ещё полезные методы:

    Yii::app()->getRequest()->getUrl() - http://monoray.ru/forum/index?var=val

    Yii::app()->getRequest()->getHostInfo() - http://monoray.ru/forum/index?var=val

    Yii::app()->getRequest()->getPathInfo() - http://monoray.ru/forum/index?var=val

    Yii::app()->getRequest()->getRequestUri() - http://monoray.ru/forum/index?var=val

    Yii::app()->getRequest()->getQueryString() - http://monoray.ru/forum/index?var=val

  4. Своё сообщение при выводе ошибки – параметр message:

     

    1. public function rules() {  
    2.     return array(  
    3.         array('username, password''required''message' => 'Будьте любезны заполнить поле "{attribute}"'),  
    4.     );  
    5. }  

     

  5. Капча не обновляет код при ошибочном вводе – попробуйте так:

     

    1. public function actions() {  
    2.     return array(  
    3.         'captcha' => array(  
    4.             'class' => 'CCaptchaAction',  
    5.             'backColor' => 0xFFFFFF,  
    6.             'testLimit'=> 1, //   
    7.         ),  
    8.     );  
    9. }  

     

    По-умолчанию, 'testLimit' установлен в значении 3. Поэтому код обновляется только после третьего неверного ввода.

  6. Если при ajax запросе вам необходимо обновить часть страницы и загрузить все скрипты, то используйте:

     

    1. $this->renderPartial('index'array(  
    2.         'criteria' => $criteria, ), false, true);  

     

    Именно, последний параметр, установленный в true, сообщает что нужно отдавать страницу со всеми скриптами.

  7. Меню на основе Cmenu, но вместо текста (label) необходимо изображение:

    Есть два варианта:

    1. Указываем путь к изображению в 'label' и устанавливаем 'encodeLabel' в значение false:

       

      1. $adminMenuItems = array(  
      2.         array('label' => '<img src="'.Yii::app()->request->baseUrl.'/images/adminmenu/manage_ads.png" />',   
      3.                 'url'=>array('/apartments/backend/main/admin'),   
      4.                 'linkOptions'=>array('title' => Yii::t('module_apartments''Manage apartments'))  
      5.             )  
      6. );  
      7.   
      8. $this->widget('zii.widgets.CMenu'array(  
      9.             'items'=>$adminMenuItems,                     
      10.             'encodeLabel' => false,   
      11. ));  

       

    2. Используем template:

       

      1. $adminMenuItems = array(  
      2.         array('label'=>'',   
      3.                 'url'=>array('/quicksearch/main/index'),   
      4.                 'template' => '<img src="'.Yii::app()->request->baseUrl.'/images/adminmenu/manage_ads.png" />'  
      5.         )  
      6. );  
      7.   
      8. $this->widget('zii.widgets.CMenu'array(  
      9.     'items'=>$adminMenuItems,  
      10. ));  

       

  8. Иногда бывает необходимо в Javascript коде выполнять скрипт в зависимости от настроек в файле конфигурации (/protected/config/main.php)

    Для того чтобы получить значение любого ключа в массиве params необходимо всего лишь добавить такой код:

     

    1. $globalConfig = CJavaScript::encode(Yii::app()->params->toArray());   
    2. Yii::app()->clientScript->registerScript('globalConfig'"var globalConfig = ".$globalConfig.";", CClientScript::POS_HEAD);  

     

    И можем выводить интересующее нас значение:

     

    1. Yii::app()->clientScript->registerScript('testConfig'' 
    2.     if(globalConfig){ 
    3.             alert(globalConfig["languages"]); 
    4.     } 
    5. ', CClientScript::POS_END);  

     

Обсудить статью на форуме