• Где хранить константы в yii2?

    @Mylistryx
    В Yii2 есть алиасы, www.yiiframework.com/doc-2.0/guide-concept-aliases.html читайте документацию, прежде чем писать велосипеды!
    И да, оформление вопроса подразумевает под собой положительный ответ на вопрос "Я искал, но не нашел...", человек, ты не просто плохо искал, ты даже не пытался искать!
    Ответ написан
    Комментировать
  • Yii2 как проделать дырку в id модели?

    @sunrails
    Добавьте поле sort_order в таблицу и перестраивайте сортировку как душе угодно. А проделывать "дырку" совсем плохая идея.
    Ответ написан
    2 комментария
  • Как настроить обновление GridView без полной перезагрузки страницы?

    @totudub
    оберни второй грид в pjax-контейнер.
    На событие click строк первого грида повесь $.pjax.reload() в котором будешь передавать id текущей записи
    Ответ написан
    3 комментария
  • Yii2, как установить нестандартный yii\caching\Cache\buildKey для модуля?

    VladimirAndreev
    @VladimirAndreev Автор вопроса
    php web dev
    В общем, вроде как работает так:

    В файле инициализации модуля прописать вот так:
    if (!empty($this->components['cache'])) {
        yii::$container->set(
            'cache',
            ['class' => $this->components['cache']['class']]
        );
    }


    При получении инстанса кеша звать так:
    $this->cache = Yii::$container->get('cache');

    Единственное, пока не понятно, можно ли динамически определять тип кеша, так как пока app\modules\blog\Cache наследует от yii\caching\MemCache ...

    Видимый пока вариант - вынести buildKey в трейт и создать все доступные варианты классов кешей...

    Таким образом, можно использовать более одного движка кешей в модуле :)
    Ответ написан
    Комментировать
  • Есть ли достойное RBAC решение на Yii2?

    kawabanga
    @kawabanga
    Думаю большинство задач будет описано в этой статье - rgblog.ru/page/yii2-i-rbac-kontrol-dostupa-na-osno... .
    Ответ написан
    Комментировать
  • Какой шаблонизатор посоветуете для OpenSource проекта на Yii2?

    edli007
    @edli007
    full stack, team lead
    один я до сих пор, спустя много лет, так и не понял зачем шаблонизатор в пхп?
    Ответ написан
  • Не работает AJAX проверка на уникальность имени пользователя YII2. Подскажи что не так в коде?

    @Barkasth Автор вопроса
    не, не в том дело... это задаем только одному полю, а если добавить виджету - то всей, но так тоже не работает...
    разобрался: ['username', 'unique'], - работает только c атрибутами ActiveRecord. А у меня class RegForm extends Model.
    Поменял: ['username', 'ajaxValidate'],
    public function ajaxValidate($attribute)
    {
    $user = User::findOne(['username' => $this->username]);
    if($user){
    $this->addError($attribute, 'Пользователь с таким логином существует');
    }elseif (!preg_match('/\+\d{12,15}/', $this->username)) {
    $this->addError($attribute, 'Введите свой номер телефона в формате +111111111111');
    }
    }
    Ответ написан
    Комментировать
  • Как в Yii2 настроить правило валидации Unique, чтоб оно работало корректно?

    Правило unique не работает при клиентской валидации, но в доке об этом забыли упомянуть.
    В данном случае, проще всего использовать ajax валидацию поля login:
    1. В представлении включить валидацию для поля
    $form->field($model, 'login', ['enableAjaxValidation' => true]);

    2. В контроллере create/update отдать ошибки валидации
    if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
        Yii::$app->response->format = Response::FORMAT_JSON;
        return ActiveForm::validate($model);
    }


    В исходном примере, если ввести корректные имя и пароль и корректный, но не уникальный логин и отправить форму, она вернется с ошибкой валидации не уникального логина. Все работает и срабатывает;)
    Ответ написан
    Комментировать
  • Можно ли yii2 Перенести генерируемый inline js в asset bundle?

    SamDark
    @SamDark
    Yii2 core team
    Можно переписать его так, чтобы генерировались, например, data- атрибуты в HTML, а сам скрипт был статичен.
    Ответ написан
    Комментировать
  • YII. Настройка маршрутизации?

    copist
    @copist
    Empower people to give
    Вариант 1

    'urlManager'=>array(
    		'urlFormat'=>'path',
    		'baseUrl' => '/~abcd', // <-- имя вашей директории, куда перенесён проект
    		'rules'=>array(
    				// стандартное правило для обработки '/' как 'site/index'
    				'' => 'site/index',
    				'user/<action:.*>'=>'user/<action>',
                                    
    				'<controller:\w+>/<id:\d+>'=>'<controller>/view',
    				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
    				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
    		),
    		'showScriptName' => false
    	),


    Вариант 2
    server {
        listen   80;
        charset utf-8;
    
        set_real_ip_from 127.0.0.1;
        real_ip_header X-Real-IP;
    
        root /path/to/~abcd; # <-- полный путь к вашей директории, куда перенесён проект
    
        location / {
            index index.html index.php;
            try_files $uri $uri/ /index.php?$args;
        }
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php {
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            #let yii catch the calls to unexising PHP files
            set $fsn /index.php;
            if (-f $document_root$fastcgi_script_name){
                set $fsn $fastcgi_script_name;
            }
    
            # With php5-cgi alone:
            fastcgi_pass 127.0.0.1:9000;
    
            # With php5-fpm:
            #fastcgi_pass   unix:/tmp/php-fastcgi.sock;
    
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fsn;
            #PATH_INFO and PATH_TRANSLATED can be omitted, but RFC 3875 specifies them for CGI
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fsn;
        }
    }
    Ответ написан
    3 комментария
  • Как выполнить action с долгим временем работы на Yii2?

    copist
    @copist
    Empower people to give
    Короткий ответ: очереди.
    Ищи информацию про Yii + RabbitMQ/ActiveMQ/ZeroMQ

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

    @matperez
    Было где-то тут уже...
    [['phone', 'email'], 'required',
                    'when' => function () {
                        if (!$this->phone && !$this->email) {
                            $this->addError('phone', 'Необходимо указать либо телефон, либо email.');
                            $this->addError('email', 'Необходимо указать либо телефон, либо email.');
                        }
                    },
                    'whenClient' => 'function (attribute, value) { return !$(\'#order-phone\').val().length && !$(\'#order-email\').val().length ;}',
                    'message' => Yii::t('app', 'Необходимо указать либо телефон, либо email.')
                ],
    Ответ написан
    Комментировать
  • Зачем нужны события в yii2?

    MegaMufa
    @MegaMufa
    Событийная модель помогает строить слабосвязанную систему. Пример из жизни. Я сейчас работаю над SAAS платформой. Компания покупает учетку и выбирает за какие модули платить. Есть модули учета, проверок, для кадровиков и т.д. Модули должны взаимодействовать между собой, но любого модуля может не быть.

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

    Вместо этого я бросаю событие типа user.created, а в модуле учета в обработчике этого события заношу пользователя в нужные списки. Получается, если модуля нет, то событие просто выброситься в холостую, а если есть, то запустится обработчик.

    Это на самом деле очень удобно. Но есть и негативная сторона: из-за слабой связаности усложняется навигация по коду. Что бы узнать, где есть обработчики приходится пользоваться поиском по имени события. Но это малая цена за гибкость, которую дают события.
    Ответ написан
    9 комментариев
  • Как сделать A-z фильтр под request->get в Yii2?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    итак у вас есть запрос:
    localhost/success-reg?email=test@mail.ru
    значит срабатывает контролер и экшен, судя по всему именуемый success-reg
    в контролере:
    public function actionSuccessReg($email){
    return $this->render('вьюха', ['email'=>$email]);
    }

    все во вьюхе у Вас есть пременная содержащая email
    Если это не то что надо - опишите подробнее, желательно с Вашим кодом
    Ответ написан
    1 комментарий
  • Как происходит буферизация переменных перед выводом виджета Breadcrumbs в Yii2?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    А ответ в том, что сначала рендерится внутренний файл (собственно, view-файл), его результат записывается в $content, а затем уже его результат вставляется в layout; вот и все.
    На самом деле, код, который отвечает за breadcrumbs не сложный, можете посмотреть документацию и исходный код, хотя это не совсем касается breadcrumbs, а больше принцип работы класса View (его тоже можете посмотреть)
    Ответ написан
    1 комментарий
  • Как занести в модель AR YII2 текущую дату?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    В модель можно записывать время почти автоматически. Для этого почитайте документацию к классу TimestampBehavior. Можно записывать время создания или обновления модели.
    Ответ написан
    Комментировать
  • Как отказать заказчику, если уже начал работать, но не справляешься с задачами?

    @heartdevil
    плыву как воздушный шарик
    Вам нужно все конкретно изложить заказчику. Если действительно не можете сделать оставшуюся часть, то немедленно расскажите об этом своему клиенту и передайте выполненную часть. Извинитесь. Если же вы можете доделать остальное, но на это вам потребуется больше времени (постарайтесь реально оценить сроки), тогда скажите как есть. Что неправильно оценили сроки из-за того, что не учли то-то и то-то. Заказчик может вас понять и оставить работать дальше, увеличив срок. Но здесь уже не будет переоценки суммы за проект. Даже "супер срочные" проекты не всегда срочные).
    Ответ написан
    Комментировать
  • Почему модель не видит GET-параметр?

    @karminski
    Senior React.JS Developer
    Поскольку age - это явно возраст, лучше тогда уж так:
    public function rules()
    {
        return [
            ['age', 'integer', 'min' => 1, 'max' => 100]
        ];
    }
    Ответ написан
    Комментировать
  • Как запретить добавление GET-параметров к уже существующим?

    @karminski
    Senior React.JS Developer
    Нужно в виджете ActiveForm добавить параметр action равный вашему route без параметров. Например,

    $form = ActiveForm::begin([
        'id' => 'search-cleaners',
        'method' => 'get',
        'action' => ['/cleaner/list'],
        'options' =>['class' => 'form-vertical'],
    ]);
    Ответ написан
    Комментировать
  • Какой метод обращения к БД использовать в Yii2 лучше?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    Если это одиночные объекты - смело можете использовать ActiveRecord. Краткость кода и удобство написания и поддержки кода перевешивает небольшой оверхед в создании объектов (который, на практике, никакой роли играть не будет).
    А вообще, разницы между использованием "строителя запроса" и между использованием AR почти что нет, разве что использовать DAO - небольшой надстройке над PDO, которая доступна через Yii::$app->db (то есть, стандартный компонент соединения к базе данных).
    Но если объектов десятки и сотни - я использую, обычно, asArray()->all();, чтобы получать результат из таблицы в виде массивов. Это покрывает 95% необходимого кода для работы с базами данных (ну, как мне кажется). Если нужен более низкоуровневый интерфейс - всегда можно определить метод в объекте AR, который возвратит необходимые данные, и внутри него произойдет необходимый запрос.
    Кстати, посоветую включить кеширование схем таблиц - очень помогает в ускорении работы AR в будущем.
    Ответ написан
    1 комментарий