Pull to refresh

Comments 8

Спасибо за ваши старания, позвольте высказать свою критику по поводу архитектурных решений.


'frontend\widgets\MultiLang\components\UrlManager'

Предложенная иерархия директорий (и неймспейсов) не укладывается в хорошие практики. Виджеты — это виджеты, а компоненты — это компоненты. Если у вас есть компонент, а рядом с ним — виджет для работы с этим компонентом, при этом существует общая предметная область, с которой ведется работа — это больше похоже на расширение.


Я бы предложил выделить это в отдельный репозиторий, или (если не планируется переиспользование) — разместить код в вашем проекте таким образом:


frontend\
    extensions\
       MultiLang\
      Components\
        UrlManager.php
      Views\
        View.php
      Widgets\
            MultiLang.php

содержание файла взято отсюда, можно следовать инструкции разработчика и использовать composer, но мы то делаем виджет, по этому просто скопируем UrlManager.php в наш виджет

Копируя UrlManager.php в свой проект, вы лишаете себя чудесной возможности получать обновления с улучшениями и исправленными ошибками из оригинального репозитория. Отказ от использования composer в пользу копи-пасты — один из самых вредных советов для PHP разработчика в 2016 году.


Что касается кода виджета:


use yii\helpers\Html;

class MultiLang extends \yii\bootstrap\Widget
{
    public $cssClass;
    public function init(){}

    // ...
}

Класс \yii\bootstrap\Widget находится в отдельном репозитории yii2-bootstrap и наследуется от yii\base\Widget, добавляя некоторые методы для работы с Frontend-фреймворком Bootstarp. Вы не используете никаких возможностей этого класса, достаточно будет наследования от yii\base\Widget.
Кроме того, вы указали лишний use и без какого-либо смысла предопределили метод init().


В коде представления вы указали use Yii;, но каждый раз при обращении к Yii явно указываете namespace:


\Yii::$app->request->get()

Да и если следовать правилам распределения ответственности в MVC, представление не должно "добывать" данные самостоятельно — данные должен собрать тот, кто вызывает рендер представления. Было бы уместно избавится от обращения к компонентам request, controller и свойству language из представления, а перенести это в виджет.

Кроме того, название MultiLang мне не кажется само-описывающим. Пока не откроешь код, сложно однозначно сказать, что делает этот класс. Что-то про мультиязычность, но что именно?
Я бы его назвал LanguageSwitcher. Согласитесь, сразу понятно, что это переключатель языков, не так ли?


Если всё таки использовать composer и подключить оригинальное расширение, можно еще больше упростить себе жизнь. Структуру директорий можно свести до такой:


frontend\
    widgets\
        LanguageSwitcher.php
        views\
            languageSwitcher.php

И я бы еще упомянул, что вызов этого виджета нужно добавить куда-то в layout, чтобы переключатель где-то отобразился.

Спасибо за комментарий, изучаю Yii2 чуть меньше месяца, пока еще не понимаю разнице между расширениями и виджетами, будет повод почитать об этом. Просто возникла задача, я поискал решение, нашел с использованием базы данных попробовал, вроде получилось, потом нашел это решение, попробовал через композер, то же получилось )), потом решил сделать виджет )) не судите строго, а лучше научите как правильно… Спасибо!
Унылые подходы, унылые фреймворки, унылые фреймворщики.
Описывать детально желания нет, ибо для адекватных людей это очевидно.
А зомбостадо никаких аргументов не услышит.
:)
Посмотрел ваши комменты, чтобы изучить что Вам нравится — неунылое. Кажется, что пишутся они специально, чтобы обратить внимание на поле «откуда».
Зомбоящик рулит?
PS. если что, я вообще в «другой стороне света» живу ), просто взгляд со стороны…
Вы видимо чуток промазали :)

Ну и что Вы изучили, что мне нравится неунылое? :)

Писать комменты, чтобы залезли мне в профиль? :)
О да, верх логики. :)

Как-то тупо обвинять человека, который выступает против унылых трендов в зомбоящичестве. В зомбоящике как раз унылые тренды и формируют.

Вдруг что, майданутость терпеть не могу. Но это оффтоп, прошу о майданутости дальше не продолжать.
UFO just landed and posted this here
Sign up to leave a comment.

Articles