вторник, 30 мая 2017 г.

yii2 полезные мелочи

Как в yii2 проверить isNewRecord в afterSave()

Теперь алгоритм проверки после сохранения такой:
app\models\Model
public function afterSave($insert, $changedAttributes)
    {
        if ($insert) {
                // Да это новая запись (insert)
        } else {
                // Нет, старая (update)
        }
        parent::afterSave($insert, $changedAttributes);
}

 

Не находит action из контроллера Not Found (#404)

В yii2 есть особенность с именование action в отличие от yii1:
в контроллере создаем action
public function actionLastNews()
{
////
}
при стандартных rules этот экшн будет доступен по адресу: /last-news
Эта мелочь может попортить немало нервов.

Подключение javascript в yii2

Inline js

Во view можно подключить произвольный javascript код:
$var = 123;
//начало многосточной строки, можно использовать любые кавычки
$script = <<< JS
    function foo() {
        return $var; //можно использовать переменные
    }
JS;
//маркер конца строки, обязательно сразу, без пробелов и табуляции
$this->registerJs($script, yii\web\View::POS_READY);
получим сразу перед закрытием body:
<script type="text/javascript">
jQuery(document).ready(function () {
    function foo() {
        return 123;
    }
});</script>
</body>
другие варианты места подключения скрипта: (документация)
  • POS_HEAD
  • POS_BEGIN: после тэга
  • POS_END: перед тэгом
  • POS_LOAD: оборачивается в jQuery(window).load(). Note that by using this position, the method will automatically register the jQuery js file.
  • POS_READY: оборачивается вjQuery(document).ready(). This is the default value. Note that by using this position, the method will automatically register the jQuery js file.
  • js-файл

    $this->registerJsFile('url/to/file.js',  ['position' => yii\web\View::POS_END]);
     
    Скопировано отсюда