Yii2Ajax валидация в модальном окне

Задача: есть некая форма, которая подгружается через Ajax в модальном окне. Необходимо производить валидацию формы и в случае успеха перенаправить на нужную страницу.

Приведу два варианта решения поставленной задачи.

Читать далее...

Yii2Множественная форма числа (plural)

Задача: выводить количество чего-либо во множественном склонении, например “1 статья”, “2 статьи”, “17 статей” и т.д.

Решение #1

$n = 17;
Yii::t('app', '{n, plural, one{У нас # статья} few{У нас # статьи} many{У нас # статей} other{У нас # статьи}}!', ['n' => $n]);
Читать далее...

Yii2Sphinx подсветка результатов поиска

В предыдущей статье я описывал как установить и использовать Sphinx для поиска в Yii2.

Теперь задача: используя Yii2 сделать поисковый запрос к Sphinx, подсветить поисковые слова (snippets, excerpts) и вывести их по 10 на страницу.

  1. Подключаем расширение yiisoft/yii2-sphinx
  2. Выполняем запрос (индекс предварительно настроен и работоспособность проверена)
$sql = "SELECT id, type_id, SNIPPET(title, :q) as _title, SNIPPET(content, :q) AS _content FROM index WHERE MATCH(:q)";
$rows = Yii::$app->sphinx->createCommand($sql)
    ->bindValue('q', Yii::$app->sphinx->escapeMatchValue($q))
    ->queryAll();

Где index — ваш поисковый индекс.

Читать далее...

Yii2Проверка существования записи

Задача: проверить существует ли запись с определенным ключом в базе данных.

Для этого используем метод exists(), который вернет true/false в случае наличия или отсутствия соответствующей записи в таблице:

if (User::find()->where(['id' => 5])->exists()) {
    // запись существует
}

Метод выполнит запрос вида: SELECT 1 FROM `user` WHERE `id` = 5

Читать далее...

Yii2Вернуться на предыдущую страницу

Необходимо в контроллере вернуться на предыдущую страницу.

Один из подходов

if(Yii::$app->user->returnUrl != '/') 
    return $this->goBack();
else return 
    Yii::$app->request->referrer ? $this->redirect(Yii::$app->request->referrer) : $this->goHome();

Что бы воспользоваться методом goBack() мы должны установить предварительно значение returnUrl, т.к оно не устанавливается автоматически (поведение нуждается в сессии и зависит от конкретной ситуации).

Поэтому мы используем значение referrer для возврата на предыдущую страницу, в случае если returnUrl не содержит установленный адрес. В противном случае нас будет перекидать на главную страницу.

Читать далее...