Yii2 konfiguracja komponentów, modułów i framework’a

Autor: Rafal Marguzewicz
Opublikowany:
Kategorie: Yii2
Tagi:


yii2 logoPlik konfiguracyjny Yii2 szablon podstawowy znajduje się pod adresem config/web.php. W przypadku konfiguracji Yii2 szablon zaawansowany, frontend i backend posiadają własne pliki konfiguracyjne: frontend/config/main.php i backend/config/main.php
Dodatkowo pobierają one konfigurację ze wspólnego pliku common/config/main.php

Po części z tego powodu, polecam wybrać Yii2 na szablonie podstawowym. Łatwiej będzie wam ogarnąć pliki konfiguracyjne.

Każdy z tych plików pobiera dodatkowe konfiguracje z innych plików. Najczęściej jest to plik z danymi dostępowymi do bazy danych app/config/db.php, z parametrami app/config/params.php które będą dostępne w obrębie całej aplikacji (np. adres email administratora).

yii2 config folder

Koncepcja konfiguracji w Yii2

Generalnie plik konfiguracyjny to tablica asocjacyjna, której :

  1. klucze główne to właściwości klasy yii\web\Application
  2. składnia bazuje na zasadach konfiguracji Yii2

Postaram się przybliżyć tą koncepcję na zasadzie komponentu który powiększa możliwości framework’a Yii2 o wysyłkę maili.

'components' => [
    ...
    'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'localhost',
            'username' => 'username',
            'password' => 'password',
            'port' => '587',
            'encryption' => 'tls',
        ],
    ],
    ...
],

Komponent przyjmuje nazwę klucza czyli np. mailer i możemy się do niego odwołać w aplikacji poprzez kod Yii::$app->mailer. Wymogiem w przypadku konfigurowania modułów lub komponentów jest podanie indeksu class, a wartość: adres klasy np yii\swiftmailer\Mailer. Zakładając że nie znamy możliwych opcji danej klasy możemy odwiedzić dokumentację API Yii2 a następnie odszukać dokumentację danej klasy. W kontekście konfigurowania, interesuje nas sekcja properties (właściwościowi), w której mamy podane możliwe opcje, z typem parametrów.

Przykład konfiguracji w Yii2

przedstawię najczęściej używane opcje konfiguracyjne na przykładzie konfigu którego sam używam. Dla ułatwienia w kleję scalony plik konfiguracyjny. A następnie opiszę najważniejsze opcje.

<?php return [
'language' => 'pl',
'sourceLanguage'=>'en',
'homeUrl' => '/',
'charset' => 'UTF-8',
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
'basePath' => dirname(__DIR__),

'modules' => [
		'menu' => [
		        'class' => '\pceuropa\menu\Menu',
		],
		'formbuilder' => [
		        'class' => '\pceuropa\forms\Module',
		        'config' => ['table' => 'form_']
		],
		
],

'components' => [
    'request' => [
        'cookieValidationKey' => 'secret_key',
        'csrfParam' => '_csrf-backend',
        'baseUrl' => '/',
    ],

    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=nazwa_bazy',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ],

    //'cache' => ['class' => 'yii\caching\FileCache',],
'session' => ['class' => 'yii\web\DbSession',
    'name' => 'bronze_cookie',

],

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'targets' => [
        [
        'class' => 'yii\log\DbTarget',
        'levels' => ['error', 'warning'],
        ],
        [
        'class' => 'yii\log\EmailTarget',
	'mailer' =>'mailer',
	'except' => ['yii\web\HttpException:404',],
        'levels' => ['error'],
        'message' => [
            'from' => ['info@pceuropa.net'],
            'to' => ['info@pceuropa.net'],
            'subject' => 'Log message from yii-macierz',
            ],
        ],
    ],
],

    'user' => [
        "class" => "yii\web\User",
        'identityClass' => 'common\models\User',
        'enableAutoLogin' => true,
        // 'returnUrl' => 'site/contact',
    ],

    'urlManager' => [
        'baseUrl' => '',
        'hostInfo' => 'http://example.dev',
        'class' => 'codemix\localeurls\UrlManager',
        'languages' => ['pl', 'en'],
        'languageParam' => 'lang',
        'enableDefaultLanguageUrlCode' => false,
        'enableLanguagePersistence' => false,
        'enableLanguageDetection' => false,
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            '/' => 'site/index',
            '<action:\w+>' => 'site/<action>',
            '<controller:\w+/?>' => '<controller>/index',
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
        ],
    ],
    'authManager' => ['class' => 'yii\rbac\DbManager',],

    'i18n' => [
        'translations' => [
            'app' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@app/messages',
                'fileMap' => [ 'app' => 'app.php', ]
            ]
        ]
    ],

    'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'viewPath' => '@app/mail',
        'useFileTransport' => false,
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'imap.google.com',
            'username' => 'info@pceuropa.net',
            'password' => 'TAJNE_HASLO',
            'port' => '465',
            'encryption' => 'ssl',
        ],
    ],
    'assetManager' => [
        'class' => 'yii\web\AssetManager',
        'bundles' => [
            'yii\web\JqueryAsset' => [ 'js' => [ '//code.jquery.com/jquery-3.2.1.min.js'] ],
            'yii\bootstrap\BootstrapAsset' => [ 'css' => [ '//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'] ],
            'yii\bootstrap\BootstrapPluginAsset' => [ 'js' => [ '//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'] ]
        ]
    ],

],

'params' => [
    'adminEmail' => 'admin@example.com',
    'supportEmail' => 'support@example.com',
    'user.passwordResetTokenExpire' => 3600,
],

'aliases' => [
    '@www' => 'http://pceuropa.dev',
    '@img' => '@www/images/',
    '@img_path' => '@app/web/images',
    '@views' => '@app/views',
]
];

Opis opcji konfiguracyjnych

  1. language – obecny język strony. Zmiana tej opcji ma wpływ na język domyślnych komunikatów Yii. vendor/yiisoft/yii2/messages oraz na atrybut lang naszej strony. Opcja ta wpływ na komponent i18n (linia 83)
  2. sourceLanguage – opcja ta określa w jakim języku jest napisana pierwotna treść strony. Potrzebna jest tylko w przypadku gdy aplikacja posiada więcej niż jeden język. Żeby lepiej zrozumieć różnicę miedzy sourceLAnguage i language polecam zerknąć na opcję i18n, która bazuje na tych opcjach.
  3. modules – tutaj dodajemy nowe moduły. Klucz to ID modułu. np /forms/kontroller/action. Możemy w ten sposób zarządzać przestrzenią nazw np dodając moduł administracja. Jest to szczególnie przydatne w przypadku Yii2 template basic. Tutaj również możemy przekazywać dane konfiguracyjne modułu. Nazwy własności muszą się pokrywać z tymi publicznie udostępnionymi w klasie modułu.
  4. components
    • request – podstawowa opcja to cookieValidationKey – klucz zabezpieczenia ciasteczek. Jeżeli istnieje zagrożenie złamania zabezpieczeń ciasteczek – zmiana klucza zdezaktualizuje stare ciasteczka i wymusi użycie nowych. baseUrl – opcja przydatna gdy aplikacja jest w podkatalogu (np. backend – panel administratora)
    • db – opcje dostępowe bazy danych
    • log – logowanie zdarzeń. Ja preferuje tworzyć logi w bazie danych. Oraz logi na email w razie zdarzeń poziomu error z wykluczeniem zdarzeń 404. Przez roboty indeksujące odwiedzające nie istniejące podstrony przychodzi za dużo komunikatów. Przez co łatwiej o przeoczenie tych najbardziej ważnych. Dzięki temu komponentowi mogę naprawić błędy za nim użytkownik skończy pisać email informacją że coś nie działa.
    • user – logowanie, rejestrowanie, zarządzanie stanem autoryzacji użytkownika. Wartość identityClass to nazwa klasy, której metody odpowiedzialne są za określanie tożsamości użytkowników.
    • urlManager – zarządzanie adresami URL. enablePrettyUrl ustawione na true uruchamia przyjazne wyszukiwarkom i ludziom adresy URL. W tedy w rule trzeba ustawić zasady przepisywania adresów. Np. /index.php?r=kontroler/view&id=3 przepisze adres na formę /kontroler/3.

      baseUrl i hostInfo używane są przez klasę yii\helpers\Url do generowania adresów URL. Jeżeli nasza strona jest w podfolderze to w tedy baseUrl (również modułu request) trzeba ustawić np na ‚/admin. hostInfo jest podbierane w przypadku generowania absolutnych adresów URL. Na przykładzie tego komponentu możecie zauważyć że użyłem klasy dostawcy oprogramowania zewnętrznego. Co rozszerzyło menadżer URL o możliwość przedrostków języków (pl,en) oraz dodatkowe opcje konfiguracyjne. Teraz zamiast przepisania adresu na /kontroler/3 jest /pl/kontroler/3. enableDefaultLanguageUrlCode na false powoduje że zamiast /en/kontroler/3 jest /konroler/3. showScriptName na false – nie pokazuje index.php
      ac

    • authManager – menadżer autoryzacji. Klasa yii\rbac\DbManager pozwala na autoryzacje RBAC zapisem do bazy danych. Polecam RBAC bo jeżeli nawet nie potrzebujemy autoryzacji opartej na rolach i zasadach a jedynie autoryzacji zalogowany/gość to będziemy mogli wybrać.
    • i18n – komponent odpowiedzialny za internacjonalizacje strony. Możemy dodać dodatkowe źródła tłumaczeń (pliki yii\i18n\PhpMessageSource, baza danych) oraz oreślić miejsce źródła
    • mailer – wybór klasy zarządzającej wysyłkę emaili padł na yii\swiftmailer\Mailer. Rozwiązanie atomowe – możesz spać spokojnie zakładając że podałeś odpowiednie dane autoryzacyjne do zdalnego serwera SMTP. viewPath – ścieżka do folderu z widokami/szablonami wiadomości email
    • assetManager – zmiana domyślnych lokalizacji zasobów CSS i Js. Jeżeli chcesz zminifikowane wersje ale lokalne możesz ustawić.
      
      'bundles' => [
                  'yii\web\JqueryAsset' => [ 'js' => [ 'jquery.min.js'] ],
                  'yii\bootstrap\BootstrapAsset' => [ 'css' => [ 'css/bootstrap.min.css'] ],
                  'yii\bootstrap\BootstrapPluginAsset' => [ 'js' => [ 'js/bootstrap.min.js'] ]
              ]
      
    • params – globalne parametry, dostępne na terenie całej aplikacji. Aby dostać się do wartości adminEmail należy użyć kodu: Yii::$app->params[‚adminEmail’]. Jeżeli zamierzasz zapisać ścieżki patch lub url lepiej użyj aliasów
    • aliases – Yii2 posiada wiele domyślnych aliasów path i URL. Jeżeli potrzebujesz przypisać lokalizację folderu dokumentów możesz to zrobić tutaj. A w aplikacji użyć Url::to(‚@img/photo.png’). W razie refaktoryzacji galerii lub użycia tego samego modułu na innej stronie wystarczy zmienić jeden alias.
Yii2 konfiguracja komponentów, modułów i framework’a
0 / 0 vote


Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Nazwa *
Email *

Przeczytaj poprzedni wpis:
Yii2 testy: Instalacja i konfiguracja codeception.

Ten tutorial jest dla wersji Yii 2 Basic Application Template. Yii2 szczególnie od wersji 2.0.10 ułatwia sprawę testów. I jeżeli...

Zamknij