Część wspólna – Common
W poprzednim poradniku poleciłem skopiować całą gotową strukturę z przykładowego projektu do katalogów aplikacji common, backend oraz frontend. Dziś usuniemy zbędne pliki i foldery z tych katalogów. Kopiowanie struktury standardowego projektu przyspiesza pracę, dlatego ją kopiujemy. Przechodzimy zatem do folderu z naszym kodem utworzonym w poprzednim poradniku. Na początku zajmiemy się folderem common.
$ cd /srv/test/protected/common
Usuwamy następujące katalogi: views, tests, runtime, migrations, messages, controllers, commands oraz wszystkie pliki .htaccess, yiic, yiic.php oraz yiic.bat
$ rm -rf views tests runtime migrations messages controllers commands
$ rm .htaccess yiic yiic.php yiic.bat
W folderze config znajduje się konfiguracja naszej aplikacji. W zależności od jej wielkości możemy ją podzielić na kilka sposobów. Zamieniamy trzecią linijkę kodu z
<!–?php
return array(
'basePath’…..
na
<?php
$common = array(
'basePath’…..
W naszym poradniku będę używał świetnego narzędzia jakim jest gii. Aby był włączony należy odkomentować linie w sekcji modules oraz zmienić hasło. Usuniemy klucz name naszej aplikacji ponieważ będzie on ustawiany w konfiguracji aplikacji frontend lub backend. Usuwamy zakomentowane wpisy odnośnie managera adresów oraz bazy danych. W sekcji components mamy wpisy odnośnie logowania, odkomentowujemy wpisy z CWebLogRoute i dodajemy klucz levels z wartością error, warning. Od tej chwili błędy będą nam się pojawiać na stronie. W parametrach zmieńmy adres administracyjny. Teraz zajmiemy się tworzeniem konfiguracji da konkretnej maszyny – każde środowisko ma odmienne konfiguracje – jak chociaż konfiguracje bazy danych, dlatego stworzymy sobie możliwość nadpisywania standardowych środowisk dla konkretnej maszyny. Na końcu naszego pliku konfiguracji main.php dodajemy następujące dwie linijki kodu:
$common_local_conf = require (realpath(dirname(__FILE__) . '/main-local.php’));
return CMap::mergeArray($common_local_conf, $common);
Tworzymy plik main-local.php i dodajemy do niego następującą konfigurację bazy danych:
<?php
return array(
'components’ => array(
'db’=>array(
'connectionString’ => 'mysql:host=NAZWA_HOSTU;dbname=NAZWA_BAZY_DANYCH’,
’emulatePrepare’ => true,
'username’ => 'Nazwa użytkownika’,
'password’ => 'Tutaj wpisujemy hasło’,
'charset’ => 'utf8′,
'tablePrefix’ => 'tbl_’,
),
), // end of components
);
Plik main-local.php możemy zapisać pod inną nazwą np. main-local.tpl i dołączyć do repozytorium kodu.
Frontend
Na samym początku pliku konfiguracyjnego protected/frontend/config/main.php dodajemy funkcje, która uprości nam tworznie ścieżek.
<?php
function _joinpath($dir1, $dir2)
{
return realpath($dir1 . '/’ . $dir2);
}
Aby nasza aplikacja działała poprawnie musimy skonfigurować ścieżki do folderów protected oraz runtime. Dodatkowym ułatwieniem będzie ustawienie zmiennej $homePath aby wskazywała nam na folder aplikacji. W przyszłości będziemy używać elementów wspólnych dla całej aplikacji, dlatego utworzymy sobie alias common. Alias ten będzie wskazywał folder współdzielonych elementów.
$homePath = dirname(__FILE__) . '/..’;
$protectedPath = _joinpath($homePath, ”);
$runtimePath = _joinpath($homePath, 'runtime’);
$common = _joinpath(dirname($homePath . '/../../’), 'common’);
Yii::setPathOfAlias(’common’, $common);
Zamieniamy teraz linię kodu zwracającą nam tablice z konfiguracją, aby naszą konfiguracje przypisywała do zmiennej $frontend. Konfiguracje bazową zamieszczoną w protected/common/config/main.php wczytujemy do zmiennej $common_conf. Do łączenia dwóch konfiguracji używamy statycznej metody CMap::mergeArray. Na końcu pliku dodajemy :
$common_conf = require (Yii::getPathOfAlias(„common.config”) . '/main.php’);
return CMap::mergeArray($common_conf, $frontend);
W tym momencie musimy wyczyścić plik konfiguracyjny frontendu ze zbędnych komentarzy i z nadpisujących kluczy konfiguracji. Usuwamy klucz log, db, errorHandler oraz user z sekcji components. Odkjomentowujemy klucz urlmanager oraz usuwamy sekcję params aby nie nadpisywała nam standardowych parametrów z części common.
W tej chwili linki w naszej aplikacji wyglądają w następujący sposób:
http://test.local/index.php?r=site/index
http://test.local/index.php?r=site/page&view=about
http://test.local/index.php?r=site/contact
http://test.local/index.php?r=site/login
Kolejną rzeczą którą zmienimy są przyjazne linki, aby je zmienić zamieniamy sekcję urlmanager jak poniżej:
'urlManager’ => array(
'urlFormat’ => 'path’,
'showScriptName’ => false,
'caseSensitive’ => true,
'rules’ => array(
'<controller:\w+>/page/<view:\w+>’ => '<controller>/page’,
'<controller:\w+>/<id:\d+>’ => '<controller>/view’,<br />'<controller:\w+>/<action:\w+>/<id:\d+>’ => '<controller>/<action>’,<br />'<controller:\w+>/<action:\w+>’ => '<controller>/<action>’,
),
),
Od tej chwili nasze linki będą wyglądały w ten sposób:
http://test.local/site/index
http://test.local/site/page/about
http://test.local/site/contact
http://test.local/site/login
Podsumowanie
W aplikacji backend postępujemy analogicznie jak w powyższym przykładzie. Ustalamy konfiguracje dla UrlManagera oraz łączymy plik protected/common/config/main.php z plikiem konfiguracyjnym protected/backend/config/main.php za pomocą CMap::mergeArray. W tym wpisie to już wszystko. Jeżeli było coś nie jasne napisz o tym w komentarzu!