Ответы пользователя по тегу Yii
  • Как подключить стиль?

    Decadal
    @Decadal
    а если нет, то во вьюхе:
    $this->registerCssFile ( '/css/some.css', ['depends'=>'Asset'] );

    Первым параметром url, можно использовать алиас @ web.
    depends указывается, если нужно подключить css-файл после какого-то ассета (встроенного или кастомного). Можно не указывать массив настроек вообще.
    Документация
    На русском про ресурсы
    Ответ написан
    Комментировать
  • Как писать комментарии в yii2?

    Decadal
    @Decadal
    yii2 тут ни при чём.

    Всё зависит от того, каким редактором или IDE пользовался автор кода - обычно там свои встроенные генераторы для комментариев. Например, PhpStorm использует https://www.phpdoc.org/ - этот стандарт.
    @inheritdoc - согласно стандарту, отсылка к документации родительского класса.
    ставить так - перед функцией или переменной нажимаете три клавиши: /** , затем ENTER
    Ответ написан
    Комментировать
  • Почему не создается папка /vendor/?

    Decadal
    @Decadal
    Проверьте наличие файла composer.json - не пустой ли он, и в той же директории, откуда вы запускаете composer. При успешном выполнении composer генерит файл composer.lock, в котором физически прописаны все загруженные зависимости. Если его нет - composer не отработал. Посмотрите, всё ли хорошо с правами и имеет ли право скрипт создавать папки в директории.
    Ответ написан
    Комментировать
  • Почему не устанавливается расширение через composer?

    Decadal
    @Decadal
    попробуйте поставить в своём composer.json minimum-stability: 'dev'
    Ответ написан
    Комментировать
  • Как на Yii2 в UrlManager адресовать все страницы на один route?

    Decadal
    @Decadal
    '<url:(.*)>' => 'site/index',

    \w+ - это строка регулярного выражения. w - cопоставляется с любым алфавитно-цифровым символом из базового латинского алфавита, включая символ подчёркивания. Эквивалентен набору символов [A-Za-z0-9_]. Символ + означает один или более символов из набора [A-Za-z0-9_]
    Полезно прочитать про именованные параметры
    Ответ написан
    Комментировать
  • Как оформить произвольный класс в Yii2?

    Decadal
    @Decadal
    MVC - архитектура, которая строится при помощи связки модель-вьюха-контроллер. Но это не значит, что любой класс, который вы захотите создать, должен быть либо вьюхой, либо контроллером, либо моделью. Нет, смотрите по назначению вашего класса - в Yii2 существуют хелперы, которые просто созданы в папке helpers (можете создать свою - frontend/helpers, почему бы и нет?). И вызываются примерно так: ArrayHelper::getValue($array, 'foo.bar.name');
    Возможно, ваш класс лучше оформить как сервис - тогда почитайте про сервис-локатор. Читайте документацию, смотрите, как работает сам Yii2 и черпайте решения из него же.
    Где именно создавать классы? Решайте сами. Если работаете с advanced-шаблоном, можете создать в common папку components и запилить там свои классы. Не забудьте для них указать namespace common\components; и тогда вы сможете подключать их так:
    use common\components\MyClassName;
    //...
    $api = new MyClassName($someConfig);
    Ответ написан
    3 комментария
  • Почему не корректно работает timestampBehavior yii2?

    Decadal
    @Decadal
    В документации yii2 есть такие строки:

    For the above implementation to work with MySQL database, please declare the columns(created_at, updated_at) as int(11) for being UNIX timestamp.


    Документация

    попробуйте изменить типы полей. Кроме того, там же есть пример реализации timestampBehavior.
    Ответ написан
    3 комментария
  • Какую ОС выбрать для Yii 2?

    Decadal
    @Decadal
    Книгу лучше пока отложить, она тяжеловата для начинающих.
    Вы от Linux все равно никуда не денетесь, это почти как с английским: да, до определенного момента можно почти не учить язык. Но придет время, когда незнание языка станет тормозить ваше развитие.
    То же самое с ОС - пока вы только начинаете постигать фреймворк, работайте с чем удобно. Но придет время для практики, а там 90% что прод на линукс. И незнание нюансов будет стоить многих часов (возможно, нервов тоже).
    Ответ написан
    1 комментарий
  • Как организовать связь "родительской" таблицы с 2мя одинаковыми наборами данных в "дочерних"?

    Decadal
    @Decadal
    Сделайте промежуточную таблицу с ключами id_a, id_b1, id_b2. У вас появится сущность, которая описывает сложную связь между А и B, только учтите симметричность id_b1 id_b2
    Ответ написан
  • Почему две параллельные транзакции не блокируют друг друга?

    Decadal
    @Decadal
    думаю, идею можно подсмотреть здесь: dr-magic.blogspot.com/2010/01/3.html
    и ещё один ресурс: https://msdn.microsoft.com/ru-ru/library/aa0416cz(...
    то есть, при сохранении нужно сначала проверить, совпадает ли версия записи, которая бралась транзакцией в начале, с версией, которая на сервере сейчас. Если нет - повторно совершать транзакцию с обновлёнными данными.
    в Gii, генераторе для yii2, есть даже поле под такие потребности - lock называется.

    Также, если говорить конкретно про вашу ситуацию, можно переопределить ActiveQuery - чтобы он выполнял апдейт в таком стиле -
    UPDATE Table1 Set Col1 = :new_val1, lock = :old_lock + 1
    WHERE (lock = :old_lock)
    Ответ написан
  • Как добавить переменные в модель формы?

    Decadal
    @Decadal
    Модель описывает структуру сущности как таковой. Если вы извлекаете все записи из БД, то формируете массив данных, описывающих одну и ту же сущность. Поэтому для обработки массива нужно создать другую модель, которая будет содержать в себе массив Names, и вот уже в него будут попадать ваши чекбоксы. Кстати, было бы проще вам помочь, если бы вы сказали, что делает форма на главной.

    Во вьюхе, чтобы передать массив данных, нужно рендерить что-то вроде <input name="names[]" type="checkbox">
    в цикле
    как сделать это в стиле yii2, не знаю, не задавался вопросом (кстати, yii в теги)
    upd:
    Вот и вопрос, как добавлять в модель формы эти переменные?

    ещё раз: эти переменные не требуют того, чтобы быть описаными в модели поимённо, поскольку смыславая нагрузка у них одна и та же - это значения поля "name".
    Поэтому хранить их следует в другой модели, у которой есть поле names, обозначающее массив имён. Тогда ваш вопрос уйдёт в сторону от создания динамической модели с полями на основе данных, и упрётся только в рендер чекбоксов из массива данных и передачу массива в поле модели.
    Ответ написан
    1 комментарий
  • Как правильно работать с layuots (работа с с виджетом dmstr/yii2-adminlte-asset,)?

    Decadal
    @Decadal
    в action контроллера писать
    $this->view->params['model'] = new Model; 
    //...
    //вызывать render, всё как обычно


    в layout:
    $model = $this->params['model'];
    //... обрабатываем модель
    Ответ написан
  • Как отключить navbar-toggle?

    Decadal
    @Decadal
    Если речь идёт про стандартные yii2-app-basic или advanced, то вы можете найти это в папке app/frontend/views/layouts/main.php для advanced или app/views/layouts/main.php для basic. Там инициализируется NavBar, туда же и изменения вносить.

    upd:

    Для внесения изменений в сам виджет можно добавить в папку widgets класс CustomNavBar extends yii\bootstrap\NavBar, и... самое простое решение - переопределить функцию renderToggleButton;
    renderToggleButton() {return ''}
    а в layouts/main.php вместо use yii\bootstrap\NavBar; написать use app\widgets\CustomNavBar;
    Потому что в стандартном NavBar bootstrap функция renderToggleButton() выполняется вне зависимости от options и её нельзя отключить массивом настроек.
    Ответ написан
    3 комментария
  • 2 одинаковых сайта в одном yii2 advanced?

    Decadal
    @Decadal
    Стоит сделать как модули, потому что ресурсы, хранимые в папке web (стили, скрипты), придётся либо дублировать для каждой папки ваших сайтов, либо создавать web в common и регистрировать для него отдельный сабдомен. А так вы можете просто указать для каждого модуля свою базу данных и layout, сделать базовые контроллеры в common, а в модулях их просто использовать. Имеет смысл копировать папки только если предвидятся изменения в скриптах или стилях.

    upd: а ещё лучше - в вашем случае - сделать просто папки web-site1 и web-site2, где будут только index.php, и в них подключать main-local1 или main-local2 конфиги, у которых будут разные бд. Настроить две точки входа и всё
    Ответ написан