Ответы пользователя по тегу Yii
  • Как предать переменную из view в layout в twig?

    Это немного противоречит той концепции Yii2, которую она дает. в представляение уходит уже готовый, полностью собранные из фильтров и виджетов вид. Большая часть кода уже инкапсулирована и ушла ОТ сервера, а для передачи используются либо формы, либо контроллер с запросом на какое-то действие. Для смены классов, лучше придумать что-то из контроллера, а вид должен заниматься только показом содержимого.

    Но! думаю можно попробовать так, когда-то работало в Yii 1.x
    в виде
    /* 
     *Доп. параметр, причем он в layout-е 
     *будет доступен только в секции body, 
     *в секции head нет!
     */
    $this->params['myparam'] = $myparam;


    В layout
    <?php $this->beginBody() ?>
        
    <!-- Причем это доступно только в секции body -->
    <?= $this->params['myparam']?>
    
    <?= $content ?>
    
    <?php $this->endBody() ?>
    Ответ написан
  • Как снизить нагрузку на БД при большом количестве запросов?

    Вы используете транзакциями в своих запросах ? Если у вас есть логи или ревизии сносите их к чертям. Скрипты или сам JS - это клиентский язык, он работает у клиента в браузере, а не на серваке. Если вся проблема в скриптах, то можно же запускать их по запросу, а не держать включенными постоянно.
    Ответ написан
  • Как создать свое правило валидации в yii2?

    Как все сложно у вас. У Yii2 есть собственный валидатор строчек Документация

    В Ruls просто указать
    ['SomeString', 'string', 'length' => [4, 150]],
    / не меньше 4, но не больше 150
    Только это правило на общую длину комментария. Если вам нужно, что бы слова были не больше 150. Вам придется разбивать входящую строку на массивы слов и проверять этим валидатором.

    Для выделения всей логики, и использования валидации. Можно реализовать Встроенный валидатор
    Ответ написан
  • Как лучше организовать несколько сайтов на Yii2?

    Так можно реализовывать и это вариант. Ведь у вас и так уже по сути два приложения. Frontend - Одно приложение для клиента.
    Backend - приложение админка, второе.

    Фреймворк и служит для таких глобальных задач. Ничего не мешает объединить или дать возможности пользователям одного сайта доступ к другому(например через токены). Но в таком варианте, вам нужен мощный сервер. поскольку запросы будут нагружать не фреймворк, а сервак. И если вам положат сервер на одном, второй сайт помрет так же. Тут вопрос вашего кода и общей производительности.

    Вот еще с офицалки www.yiiframework.com
    Ответ написан
  • Как сделать поиск в Yii2?

    Дык, а в чем сложность ? делаете форму с инпутом пишите к ней валидацию.
    запрос для QB у вас есть, вы сами его написали. Делаете запрос, вывод можно через Ajax сделать, если Бд небольшое.

    только рекомендую делать вам так LIKE LOWER('%то что передал юзер%').
    Вероятно, что ваш проект может стоять на разных бд и например PostgreSQL имеет другой аналог LIKE, он ищет по регистру аналогия на мускул без учета регистра будет такая ILIKE LOWER('%то что передал юзер%')
    Ответ написан
    Комментировать
  • Yii2 Вывод связанных данных в dropDownList?

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

    Посмотрите как сделан каталог на той же розетке. Там реализация следующая:
    - Раздел(например Компьютеры)
    ->** см ниже
    ->Категория( например Мониторы, Процессоры, мышки, клавиатуры)
    -> Далее сами продукты.

    (Опционально!) можно добавить и под категорию между разделом и категорией, например если вы хотите разделить компьютеры по классам (Игровые, ноутбуки, для офиса и т.д.) Если у вас бренд, можно выводить по брендам.
    Ответ написан
    Комментировать
  • YII2: Как сделать Layout уровня-Модуля?

    Для модуля аналогичное переопределение как и для контроллеров. Таким вот образом. Если layout не переопределен для модуля, он будет использовать его в уровне приложения.
    для пути @backend/views/layouts/post.php
    namespace app\controllers;
    
    use yii\web\Controller;
    
    class PostController extends Controller
    {
      //
        public $layout = 'post';
    }


    Пруф

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

    Либо используйте вложенность для шаблонов. Описывается ниже в статье, на окторую дал ссылку.
    Ответ написан
    Комментировать
  • Как правильно сделать select с помощью hasMany()?

    1) Связи объявляются на двух концах пример:
    class Customer extends ActiveRecord
    {
        public function getOrders()
        {
            return $this->hasMany(Order::className(), ['customer_id' => 'id']);
        }
    }
    
    class Order extends ActiveRecord
    {
        public function getCustomer()
        {
            return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
        }
    }


    2) Получение связных данных
    // SELECT * FROM `customer` WHERE `id` = 123
    $customer = Customer::findOne(123);
    
    // SELECT * FROM `order` WHERE `customer_id` = 123
    // $orders - это массив объектов Order
    $orders = $customer->orders;


    3) Принцип получения массива объектов. Второй вариант для продолжения запроса типа ->where(Бла бла)
    $customer->orders; // массив объектов `Order`
      $customer->getOrders(); // объект ActiveQuery
    Ответ написан
    2 комментария
  • Yii & Yii2. Как вы управляете связанными данными?

    Ответ в самом низу, но опишу как делаю я, мне может тоже подскажут в комментах.

    Обычно это два варианта:
    1) Вы не будете использовать релейшены. Тогда просто вытащишь объект и работаешь с ним.
    2) Вы будете использовать релейшены. Делай джоин\withJoin

    В этом плане доктрина в симфони дружелюбнее, связь содержит инфу, но не содержит объект, т.е что-то типо промежуточного этапа. Как писали выше.

    Сейв делаю линком:
    $customer = Customer::findOne(123);
    $order = new Order();
    $order->subtotal = 100;
    $order->link('customer', $customer);

    В вышеприведённом примере, метод присвоит атрибуту customer_id объекта Order значение атрибута id объекта Customer и затем сохранит его в базу данных. Тоже самое можно делать и с промежуточными таблицами, линк автоматов вставит строчки в промежуточную таблицу.

    При удалении можно использовать метод unlink() - он снимает все связи выставляя Id-шки объектов в null, а если передать с атрибутом $delete = true. Он удалит строку на связи в промежуточной таблице.

    Ответ: Да, удалять и заново прописывать.
    Ответ написан
    Комментировать
  • Где размещать код фильтрации в Yii2?

    Фильтры это...
    Но на сколько я знаю, логику описывать можно в моделях, там же и валидация. Сама же фильтрация, ссылку на которую дал выше, описывается в контроллерах. Только ознакомитесь внимательно. Связи естественно в моделях подтягиваются.
    Ответ написан
  • Какой шаблонизатор посоветуете для OpenSource проекта на Yii2?

    Используйте Твиг, он не только более функциональный чем Smarty 2/3, но и быстрее в три раза, кушает меньше памяти при компиляции и использует меньше памяти при скомпилированных шаблонах.
    Ответ написан
    8 комментариев
  • Как в Yii2 не загружать фикстуры для некоторых тестов из набора?

    Закомментировать метод ?
    Ответ написан
    Комментировать