Звездочка у поля required Yii2

Раньше в Yii1 если использовать правило required для поля, у лейбла автоматически появлялась звездочка «*»

В Yii2 такую вещь убрали. Что бы решить эту проблему можно воспользоваться CSS.

Вставьте это код в ваше представление (view):

После этого перезагрузите страницу.

Создание новости - Google Chrome

Спасибо yiijeka

beforeSave() и afterSave() в Yii2

Замечательные методы beforeSave() и afterSave() в Yii2 помогают нам решать различные задачи, к примеру вы хотите перед сохранением в базу поменять формат даты, или сохранить лог действия. Но не все знают как правильно их наследовать.

Начнем с простого afterSave():

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

Теперь beforeSave():

Все практические так же как и с методом afterSave() за исключением того что нам нужно вернуть результат работы родительского метода, иначе мы при вызове метода $model->save() будем получать false, и наша модель не будет сохраняться, при этом мы не будем получать никаких ошибок. Учтите этот момент.

В Yii1 принцип такой же, только там не передаются параметры.

Yii2 cookievalidationkey — зачем он нужен и откуда его брать

Если вы устанавливаете Yii2 по средствам скачивания архива, вам необходимо задать cookievalidationkey, он служит для валидации cookie, в противном случае у вас будет ошибка при запуске вашего проекта:

Есть 2 варианта как это исправить:

1. Ввести ключ, для этого откройте файл yii/config/web.php и введите рандомный набор символов или можно использовать md5(‘asdFw42Q’)

2. Можно отключить валидацию cookie, для этого нужно прописать следующие:

 

Не работает Limit в CListView

Хотел сделать список последний обновлений, но при указании лимита в CActiveDataProvider все равно выводилось все содержимое таблицы.

 

Решение оказалось простым, нужно было отключить пагинацию (Pagination), в итоге код стал таким:

 

Не работет CActiveForm в Yii

По невнимательности столкнулся с проблемой когда форма CActiveForm в Yii не работала, а точнее не подгружала jquery. При этом никаких ошибок не было за исключение

ReferenceError: $ is not defined

Главная - Mozilla Firefox

Это ошибка как раз и указывает что не подключен jquery. Моя форма была в виде виджета который был попапом.

WSERVEROpenServerdomainscoinprotectedviewslayoutsmain.php (animpic, pasta, coin, db) - Sublime Text 2 (UNREGISTERED)Помогло прямое включение jquery которое и показало мне где в моем виджете ошибки.

Главная - Mozilla Firefox1

Ошибка TypeError: jQuery(…).yiiactiveform is not a function (Yii1)

Делая форму столкнулся с проблемой когда не работала ajax валидация, несмотря даже на то, что у меня стояла

 

долго не мог понять в чем причина, пока не заметил ошибку с помощью firebug.

TypeError: jQuery(…).yiiactiveform is not a function

Суть этой ошибки в том что некоторые функции дублируются, а получается такое из-за того что, скорее всего, у вас в layouts порописано «вручную» подключение jquery

примерно так:

 

Когда вы продключаете аякс валидацию, на странице у вас опять подключается jquery который уже встроен в Yii.

Для решени этой проблемы замените свое «ручное» подключение на

 

Использования CDbCriteria в Yii

Пример использование CDbCriteria в Yii

 

Yii: scope фильтрация, фильтрация по умолчанию, отмена фильтрации по умолчанию

Имеется модель (класс, наследник CActiveRecord), соответствующая некоторой таблице реляционной базы данных.
Задача — сделать так, чтобы при поиске элементов в данной таблице они изначально отфильтровывались по какому-либо критерию.

Поясню на примере. В таблице user хранятся пользователи различных типов: студенты, преподаватели, абитуриенты (тип задается значением поля role таблицы: student, prepod, abiturient). Необходимо, чтобы все возможные запросы на выборку данных из этой таблицы через данный класс изначально работали только со студентами.

Для решения данной задачи в Yii предусмотрен удобный механизм Scope, который позволяет на уровне класса для запросов задавать подобные предварительные условия.

Вот некоторые примеры кода, демонстрирующие данную возможность.

1. Scope по умолчанию

В класс-модель добавляем метод defaultScope. В нем задаем те предварительные условия, которые требуются

Теперь при обращениях к объектам этого класса мы всегда будем работать только со студентами, например

вернет всех активных студентов (без активных преподавателей и абитуриентов).

Если требуется отменить фильтр по умолчанию (по какой-либо причине), необходимо воспользоваться в запросах методом resetScope(). Пример:

2. Именованные Scope

Кроме Scope по умолчанию, вы можете задать любое число специфичных фильтров. Они задаются через переопределение метода scopes.
Пример, который реализует три фильтра: students, prepods и abiturients

В класс-модель добавляем метод scopes:

Как используем? Добавляем фильтр в запрос (предполагается, что метод defaultScope из пункта 1 данного поста не задан, иначе запросы 2 и 3 вернут пустое значение не смотря на наличие записей в таблице):

И напоследок еще несколько интересных возможностей фильтрации.

— В одном запросе могут использоваться сразу несколько фильтров.

Например, если к добавленным в п. 2 фильтрам добавить фильтр only10, который будет ограничивать вывод только 10-ю первыми записями

можно будет выполнять следующие запросы

— существует альтернативный способ создания дополнительного фильтра, который позволяет использовать параметры при вызове фильтра
Для этого необходимо добавить в класс — модель метод с уникальным именем (именем фильтра) следующего содержания:

Вызов будет таким

В отличие от предыдущего примера, сейчас мы можем сразу при вызове задавать параметры для функции фильтрации (число возвращаемых записей, например). Иногда это может оказаться полезным.

Миграции в yii — примеры

Примеры миграций

Создание таблицы

[php] class m120302_172329_create_tbl_news extends CDbMigration
{
public function up()
{
$this->createTable(‘el_slider’, array(
‘id’ => ‘pk’,
‘title’ => ‘VARCHAR(200) NOT NULL’,
‘desc’ => ‘text NOT NULL’,
‘link’ => ‘VARCHAR(200) NOT NULL’,
‘img’ => ‘VARCHAR(200) NOT NULL’,
‘show’ => ‘tinyint(1) DEFAULT 1’,
‘order’ => ‘int(10) DEFAULT 0’,
) , ‘ENGINE=InnoDB CHARSET=utf8’);
}
public function down()
{
dropTable(‘el_slider’);
}[/php]

Добавление записи в таблицу с помощью миграции

[php]
$this->insert(‘tbl_news’, array(
‘title’ => ‘Title 1’,
‘content’ => ‘Content 1’,
));[/php]

Изменение записи в таблице с помощью миграции

[php]
$this->update(‘tbl_news’, array(
‘title’ => ‘Updated title’
),
‘id=1’
);[/php]

Добавление колонки в таблицу с помощью миграции

[php]$this->addColumn(‘el_item_with_partner’, ‘option_id’, ‘int(11) DEFAULT 0’);[/php]

Переименование колонки

[php]$this->renameColumn(‘{{user}}’, ‘user_birthday’, ‘user_old_birthday’);[/php]

Удаление колонки

[php]$this->dropColumn(‘tbl_news’, ‘created_at’);[/php]