Могу кодить.
Контакты

Достижения

Все достижения (3)

Наибольший вклад в теги

Все теги (17)

Лучшие ответы пользователя

Все ответы (11)
  • Зачем в yii2 классы и объекты для генерации html?

    MrLoki
    @MrLoki
    I will.
    Ну вы даёте, одну из толковых частей фреймворка обзываете.
    В большом и сложном проекте, как правило, есть большая и сложная логика, а большая и сложная логика — предполагает большие и сложные условия. Городить условия во view — дело неблагодарное, потому что view — только представление и ничего больше, и чем оно проще тем лучше.

    Далее по списку.
    Вы в своем примере в HTML совершили ошибку, которая будет стоить вам гибкости.
    href="/index.php?r=/client/create"
    Тут должен быть использован генератор url, но тогда код становится уже сложнее и козырнуть «простотой и понятностью» не выйдет, не так ли? Это позволяет, например на начальном этапе не париться о «красивых» URL, ссылаясь на action/controller, а ближе к концу за 1 раз настроить роутинг по всему проекту, ничего не меняя во вью.

    Попробуйте нарисовать checkbox в html. Не простой, а выбранность которого будет зависеть, от параметра модели. Я подскажу:
    <input type="checkbox" value="1" name="name" <?php if($model->selected) ?>checked <?php endif ?>>

    Уже не так красиво?
    Ещё можете нарисовать select чтоб уж совсем убедиться в необходимости Html-хелпера.

    Сейчас вы можете сказать, про вынесение генерации HTML в файлы, но я вас заверю. Во-первых это породит либо множество файлов и кучу условий (одна форма с кастомным select другая со стоковым, но с label, у третьей ещё что-то), и подключение этой кучи файлов будет выполняться дольше, а без компиляции шаблонов — постоянно дольше. Во-вторых, вы снова теряете в гибкости.

    В Yii есть проблемы, но хелпер Html — не одна из них.
    Ответ написан
    Комментировать
  • Как в Yii2 организовать scope?

    MrLoki
    @MrLoki
    I will.
    Начните уже читать доки, это же основа фреймворка вообще.
    www.yiiframework.com/doc-2.0/guide-db-active-recor...

    class Model extends ActiveRecord {
        public static function find() {
            return new MyQuery(get_called_class());
        }
    }
    
    class MyQuery extends ActiveQuery {
        public function withFullUrl($url) {
            $this->andWhere(['full_url' => $url]);
            return $this;
        }
    }


    Теперь модель и query разделены, поэтому всё что относится к запросам и формированию этого самого запроса — в отдельном классе.
    Ответ написан
    1 комментарий
  • Yii2. Как организовать обмен данными БД между разработчиками?

    MrLoki
    @MrLoki
    I will.
    Как вариант: www.yiiframework.com/doc-2.0/guide-db-migrations.html правда для больших справочников всё равно придётся делать дампы и накатывать их из миграции.

    Либо шареный коннект к одной удаленной БД для всех разработчиков. Но этот вариант может привести к другим неожиданным побочным эффектам.
    Ответ написан
    7 комментариев
  • Как прикрутить Twig к Slim Framework без композитора?

    MrLoki
    @MrLoki
    I will.
    Да, сейчас у большинства компонентов в PHP есть зависимость как минимум от автолоадера композера — не видел чтоб кто-то делал этот файл самостоятельно, все рассчитывают, что композер сгенерирует его.

    Но, есть, и другой способ. Клонируем всё, например, в vendor, затем туда-же клонируем https://github.com/symfony/ClassLoader, и настраиваем. Как настроить в readme.md достаточно доходчиво написано. Кстати ложить это в файл autoload.php совсем не обязательно, если делаете настройку сами — можно положить прямо в index.php, или кто там у вас фронт-контроллер.

    И не забывайте, что компоненты сейчас не распространяются целиком, смотрите файл composer.json в том же твиге и качайте вручную все зависимости.
    Ответ написан
    Комментировать
  • Как решить проблему с конкуренцией запросов на чтение в PHP?

    MrLoki
    @MrLoki
    I will.
    Никак. Вы думаете о параллельной среде как об однопоточной. Можете принудительно пускать юзверей в один поток, тогда такой проблемы не возникнет.

    Иначе алгоритм выглядит так:
    b51629f9d4a34e85a4bbd5173a7ba794.png
    Те пользователи что зашли и получили данные в промежутке пока «десятый» получил данные и закрыл страницу, тоже дойдут до конца и сохранят свои данные.

    Чтобы пустить пользователей в один поток на запись, можете лочить таблицу между получением данных и записью инкремента, или использовать кэш для счётчиков, там это всё будет быстрее, но суть та же — дождаться пока один пользователь завершит сессию прежде чем пускать другого.
    Ответ написан
    7 комментариев

Лучшие вопросы пользователя

Все вопросы (2)