Ответы пользователя по тегу Yii
  • Мультиязычный сайт с динамический урелом в Yii2 как?

    qonand
    @qonand
    Software Engineer
    замените везде \w+ на [a-zA-Z0-9\-_]*
    и почитайте про регулярки ....
    Ответ написан
    Комментировать
  • Что использовать на backend для SPA приложений?

    qonand
    @qonand
    Software Engineer
    Yii2 или другой php фреймворк, то какой вообще в нем смысл если бОльшая часть его функционала будет не нужна, контроллеры, экшены, роутинг,

    С чего это вдруг? Для REST API как раз контроллеры, роутинги и т.п. ой как нужны

    т.д, по сути мне от него нужны только модели будут и все.

    А вот как раз модели лучше делать независимыми от фреймворка, т.к. модели это бизнес-логика, и когда она зависит от фреймворка это Bad Practice

    Так же возникает вопрос в рациональности использовать базу mySql или же переходить на mongoDB

    Рациональность использования базы данных никаким образом не относиться к взаимодействию с API. Без разницы используете ли Вы REST API или нет. Все зависит от того какие задачи решает Ваш проект, какие данные в нем хранятся, какие требования у Вас к базе и т.п. Во общем ответ на этот вопрос зависит от множества факторов и индивидуален для каждой задачи. Есть ряд задач для которых оптимальным является использование реляционной СУБД, есть задачи для которых лучше использовать документированную базу.

    Что лучше на данный момент использовать на бэкенде и что на практике используют чаще?

    Все опять таки зависит от Ваших требований и задач. Нужно сделать быстрое приложение за короткое время - используйте Yii, нужно сделать приложение с хорошо организованной архитектурой используйте Symfony
    Ответ написан
    Комментировать
  • Yii2 как принимать сторонние запросы на экшн?

    qonand
    @qonand
    Software Engineer
    Поскольку Вы передаете данные с помощью POST у Вас в данных запроса в обязательном порядке должен присутствовать CSRF-токен. Эту проблемы Вы можете решить одним из вариантов:
    1. Отключить проверку CSRF-токена. Насколько это безопасно сложно сказать, т.к. все зависит от организации Вашей системы.
    2. Использовать вместо POST-запроса GET. Если Ваш экшен не меняет статус чего либо этот вариант вполне можно использовать
    3. Организовать выдачу CSRF-токена клиентам которые будут обращаться к экшену
    Ответ написан
    Комментировать
  • Есть ли в Yii2 возможность подключить стили в футере?

    qonand
    @qonand
    Software Engineer
    Стандартных инструментов для размещения стилей в футере в Yii2 нет, поэтому надо либо подключать в ручном режиме либо самостоятельно допиливать механизмы публикации ресурсов
    Ответ написан
    1 комментарий
  • Где принято хранить scss/js файлы?

    qonand
    @qonand
    Software Engineer
    Лучше хранить их в комплекте ресурсов и осуществлять их преобразование с помощью встроенного менеджера ассетов
    Ответ написан
    Комментировать
  • Yii2 каким образом можно видоизменить gii console?

    qonand
    @qonand
    Software Engineer
    Напишите свой генератор на базе yii\gii\generators\crud\Generator или yii\gii\Generator который будет реализовывать необходимые Вам действия и подключите его к модулю gii
    Ответ написан
    Комментировать
  • Как лучше сделать wizard form в yii2?

    qonand
    @qonand
    Software Engineer
    1) Я ее могу реализовать в одном view через tab-pane, но как валидировать формочки от перехода одного таба к другому... Или вообще другое решение есть?

    Не изобретайте велосипед, есть куча готовых расширений позволяющих это сделать например вот это или это . Вообще подобных расширений полно, достаточно погуглить например так
    2) Мне посоветовали сделать по типу "actionCreate", но после удачного сохранения сделать редирект на следующий шаг заполнения анкеты,

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

    qonand
    @qonand
    Software Engineer
    В моделе объявлена реляция Status? + в моделе Status объявлена реляция Vacancy?
    Если да, тогда можно сделать так:
    $query->joinWith(['status s', 'status.vacancy v'])->where([
        'like',
        's.id_vacancy',
        $this->idVacancy
    ])->andWhere([
        'like',
        'v.title',
        $this->titleVacancy
    ]);


    Между прочим:
    1. У Вас что идентификаторы в виде строк хранятся? или причем здесь like?
    2. $q->where('status.id_vacancy LIKE "%' . $vacancy_id . '%"'); - поздравляю! Вы только что сделал дыру в безопасности сайта, про SQL-injection не слышали?
    Ответ написан
    Комментировать
  • Как настроить тестирование codeception?

    qonand
    @qonand
    Software Engineer
    Рекомендую Вам потратить небольшое количество времени и посмотреть вот это видео вроде бы в нем все понятно разжёвано
    Ответ написан
  • Почему меняется автоматически путь у изображение?

    qonand
    @qonand
    Software Engineer
    Во первых указания ссылки в стиле "img/holland.png" означает что ссылка будет формироваться относительно текущей страницы. То есть если Вы будете находиться на странице mysite.com/page то ссылка у Вас сформируется как mysite.com/page/img/holland.png

    Во вторых судя по всему Вы используете Advanced-шаблон, а это значит что Вам нужно настроить нормально Ваш Apache что бы не было этой кучи вложенных папок и Вы могли работать с front-end частью как с отдельным сайтом. Это позволит Вам избежать кучи проблем с ссылками. Ну а если не хотите этого делать тогда формируйте ссылки с помощью Url-хелпера, например
    Url::toRoute(['@web/img/image.png'], true)
    Ответ написан
    Комментировать
  • Подготовленные запросы в yii2?

    qonand
    @qonand
    Software Engineer
    Зачем Вы работает с классом Command? этим Вы только создаете себе трудности... для создания сложных запрос в yii есть класс Query, который прекрасно решает Вашу задачу, например так:
    $query = new \yii\db\Query();
    $query->from('Pages')
        ->leftJoin('categories', ['categories' => 'id_categories'])
        ->where(['status' => 1])
        ->andFilterWhere(['like', 'path', $filter_category]);
    if (! empty($filter_time)) {
        $expression = new \yii\db\Expression('now() - interval :filter_time minute', [
            ':filter_time' => $filter_time
        ]);
        $query->andWhere(['>', 'date_created', $expression]);
    }
    Ответ написан
    Комментировать
  • Как разбить сложное представление на части?

    qonand
    @qonand
    Software Engineer
    А в чем проблема использовать описанную Вами конценпцию? это вполне нормальный вариант аля HMVC
    Ответ написан
    2 комментария
  • Как накопить данные перед записью в таблицы?

    qonand
    @qonand
    Software Engineer
    В функции aggregator над каждой строкой выполняются многочисленые действия, после чего разные части строк записываются по таблицам.

    Плохо, метод должен отвечать только за реализацию одного логического действия, а не за все и сразу
    Меня интересует как можно накопить записи в массив в функции aggregator,

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

    Лучше разделите ответственность методов, например так:

    class MyClass
    {
        public function uploader($rows)
        {
            $items = [];
            foreach ($rows as $row => $data) {
                $items[] = $this->aggregator($data);
            }
            $this->save($items)
        }
    
        public function aggregator($data)
        {
            // выполнение нужных операций над данными
        }
    
        public function save($items)
        {
            // сохранение массива данных, аля batchInsert
        }
    }
    Ответ написан
    5 комментариев
  • Вопросец yii'стам, ну и симфонисты тоже загляните?

    qonand
    @qonand
    Software Engineer
    Не нравятся мне всякие Yii::$app->params['site_title'] массивы для настроек.

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

    ну типа чтоб в шаблоне было $this->settings->get('site_title');. Нормально не?

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

    Насколько я понимаю Вы хотите вынести настройки title всех страниц в единый файл настроек. В таком случае уж лучше реализовать какое-то поведение которое будет реагировать на соответствующее событие View, выбирать необходимый title для конкретного View (например по роуту) и задавать его
    Ответ написан
  • Динамическая смена даты и времени с момента публикации на Yii2, как это сделать?

    qonand
    @qonand
    Software Engineer
    Блоков на странице может быть хоть 1000 но пользователь всегда видит только определенное количество из них. Поэтому по хорошему Вам нужно обновлять срок давности не для всех блоков выведенных на станице, а только для тех которые у пользователя на виду. Соответственно Вам нужно:
    1. Определять (например при скроле страницы) какие блоки видны в текущий момент пользователю
    2. Определять массив селекторов для каждого из блока
    3. В цикле проходиться по этому массиву и для каждого из блока пересчитывать дату
    Ответ написан
  • Как без лишних костылей сделать разные конфиги для БД в Yii2 advanced?

    qonand
    @qonand
    Software Engineer
    папка environments содержит скелет для настроек приложения зависимых от окружения. Тоесть по факту, когда Вы разворачиваете проект в определенном окружение и выполняете команду init происходит копирование конфигов из папки environments в соответствующие папки и уже в них Вы указываете все параметры которые зависят от окружения (доступы к БД и т.п.). Соответственно в конфигах /common/config/main.php и т.п. указываются настройки не относящиеся к окружению (список компонентов и т.п.)

    Как без лишних костылей сделать разные конфиги для БД в Yii2 advanced?

    итого Вам нужно:
    1. Выполнить инициализацию проекта с помощью init
    2. Заполняете данные доступа в конфигах с префиксом -local
    Ответ написан
    6 комментариев
  • Как передать get параметр из view1 во view2?

    qonand
    @qonand
    Software Engineer
    Ссылку можно сформировать например так:
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            [
                'attribute' => 'id',
                'content' => function ($model, $key, $index, $column) {
                    $url = \yii\helpers\Url::toRoute(['url', 'id' => $model->id]);
                    return Html::a($model->id, $url);
                }
            ]
            'name',
        ],
    ]) ?>


    вместо URL - должен быть адрес контроллера отвечающего за вывод информации о товаре
    Ответ написан
  • Получить model в layout?

    qonand
    @qonand
    Software Engineer
    Как мне в этом файле обратится к моделе компаний например?

    Не нужно обращаться к моделям на уровне слоя, это плохая практика. Лучше уж для этой задачи создать виджет

    но при выводе результата я не вижу полей которые там должны присутсвовать

    Именно полей или данных? если полей - тогда покажите как Вы вводите, если данных - тогда их и быть не может, т.к. Вы СОЗДАЕТЕ модель, которая по умолчанию данных и не имеет.
    Ответ написан
    2 комментария
  • Как вывести kartik\select2 в модальном окне на Yii2 через renderAjax?

    qonand
    @qonand
    Software Engineer
    По всей видимости у Вас отсутствуют на страницы ресурсы для этого виджета, т.к. renderAjax - их не загружает. Соответственно Вам необходимо на самой странице (на которой выводиться всплывающее окно) сделать регистрацию соответствующих наборов ресурсов, например:
    \kartik\select2\Select2Asset::register($this)
    Ответ написан
    1 комментарий