mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-26 14:26:54 +08:00
Guide pl (#11321)
* caching fragment * guide PL Previous sections update Tutorial: shared hosting
This commit is contained in:
165
docs/guide-pl/caching-fragment.md
Normal file
165
docs/guide-pl/caching-fragment.md
Normal file
@ -0,0 +1,165 @@
|
||||
Pamięć podręczna fragmentów
|
||||
===========================
|
||||
|
||||
Pamięć podręczna fragmentów dotyczy zapisywania w pamięci podręcznej części strony Web. Dla przykładu, jeśli strona wyświetla podsumowanie danych rocznej sprzedaży w postaci tabeli,
|
||||
można tę tabelę zapisać w pamięci podręcznej, aby wyeliminować konieczność generowania jej za każdym razem od nowa. Mechanizm pamięci podręcznej fragmentów zbudowany jest w oparciu
|
||||
o [pamięć podręczną danych](caching-data.md).
|
||||
|
||||
Aby wykorzystać pamięć podręczną fragmentów, należy użyć następującego kodu w [widoku](structure-views.md):
|
||||
|
||||
```php
|
||||
if ($this->beginCache($id)) {
|
||||
|
||||
// ... generowanie zawartości w tym miejscu ...
|
||||
|
||||
$this->endCache();
|
||||
}
|
||||
```
|
||||
|
||||
Jak widać, chodzi tu o zamknięcie bloku generatora zawartości pomiędzy wywołaniem metod [[yii\base\View::beginCache()|beginCache()]] i [[yii\base\View::endCache()|endCache()]].
|
||||
Jeśli wskazana zawartość zostanie odnaleziona w pamięci podręcznej, [[yii\base\View::beginCache()|beginCache()]] wyrenderuje zapisaną zawartość i zwróci false, przez co pominie
|
||||
blok jej generowania. W przeciwnym wypadku generowanie zostanie uruchomione, a w momencie wywołania [[yii\base\View::endCache()|endCache()]] wygenerowana zawartość zostanie zapisana
|
||||
w pamięci podręcznej.
|
||||
|
||||
Tak, jak w przypadku [pamięci podręcznej danych](caching-data.md), unikalne `$id` jest wymagane do identyfikacji zawartości.
|
||||
|
||||
|
||||
## Opcje zapisu w pamięci podręcznej <span id="caching-options"></span>
|
||||
|
||||
Możesz określić dodatkowe opcje zapisu pamięci podręcznej fragmentów, przekazując tablicę opcji jako drugi parametr w metodzie [[yii\base\View::beginCache()|beginCache()]].
|
||||
Opcje te będą użyte do skonfigurowania widżetu [[yii\widgets\FragmentCache|FragmentCache]], który implementuje właściwą funkcjonalność zapisu pamięci podręcznej.
|
||||
|
||||
### Czas życia <span id="duration"></span>
|
||||
|
||||
Prawdopodobnie najczęściej używaną opcją zapisu fragmentów jest [[yii\widgets\FragmentCache::duration|duration]].
|
||||
Parametr ten określa, przez ile sekund zawartość może być przechowywana w pamięci podręcznej, zanim konieczne będzie wygenerowanie jej ponownie. Poniższy kod zapisuje fragment
|
||||
zawartości w pamięci podręcznej na maksymalnie godzinę:
|
||||
|
||||
```php
|
||||
if ($this->beginCache($id, ['duration' => 3600])) {
|
||||
|
||||
// ... generowanie zawartości w tym miejscu ...
|
||||
|
||||
$this->endCache();
|
||||
}
|
||||
```
|
||||
|
||||
Jeśli ta opcja nie jest określona, przyjmuje domyślną wartość 60, co oznacza, że ważność zapisanej zawartości wygaśnie po upływie 60 sekund.
|
||||
|
||||
|
||||
### Zależności <span id="dependencies"></span>
|
||||
|
||||
Tak, jak w przypadku [pamięci podręcznej danych](caching-data.md#cache-dependencies), zapis fragmentów może opierać się na zależnościach.
|
||||
Dla przykładu, zawartość wyświetlanego posta zależy od tego, czy został on zmodyfikowany, bądź nie.
|
||||
|
||||
Aby określić zależność, należy ustawić opcję [[yii\widgets\FragmentCache::dependency|dependency]], która może przyjąć postać zarówno obiektu klasy [[yii\caching\Dependency|Dependency]],
|
||||
jak i tablicy konfiguracyjnej, służacej do utworzenia obiektu zależności. Poniższy kod określa pamięć podręczną fragmentu jako zależną od zmiany wartości kolumny `updated_at`:
|
||||
|
||||
```php
|
||||
$dependency = [
|
||||
'class' => 'yii\caching\DbDependency',
|
||||
'sql' => 'SELECT MAX(updated_at) FROM post',
|
||||
];
|
||||
|
||||
if ($this->beginCache($id, ['dependency' => $dependency])) {
|
||||
|
||||
// ... generowanie zawartości w tym miejscu ...
|
||||
|
||||
$this->endCache();
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### Wariacje <span id="variations"></span>
|
||||
|
||||
Zapisana zawartość może mieć kilka wersji, zależnych od niektórych parametrów. Przykładowo, w aplikacji Web wspierającej kilka języków, ten sam fragment kodu w widoku może generować
|
||||
zawartość w różnych językach. Z tego powodu wymagana może być konieczność zapisu zawartości w wariacji zależnej od aktualnie wybranego języka aplikacji.
|
||||
|
||||
Aby określić wariacje pamięci podręcznej, ustaw opcję [[yii\widgets\FragmentCache::variations|variations]], która powinna mieć postać tablicy wartości skalarnych, z których każda
|
||||
będzie reprezentować odpowiedni czynnik modyfikujący wersję. Dla prykładu, aby zapisać zawartość w zależności od języka, możesz użyć następującego kodu:
|
||||
|
||||
```php
|
||||
if ($this->beginCache($id, ['variations' => [Yii::$app->language]])) {
|
||||
|
||||
// ... generowanie zawartości w tym miejscu ...
|
||||
|
||||
$this->endCache();
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### Warunkowe uruchamianie pamięci podręcznej <span id="toggling-caching"></span>
|
||||
|
||||
Czasem konieczne może być uruchamianie pamięci podręcznej fragmentów tylko w przypadku, gdy spełnione są określone warunki. Przykładowo, dla strony zawierającej formularz,
|
||||
pożądane może być zapisanie i wyświetlenie go z pamięci podręcznej tylko w momencie pierwszego pobrania jego treści (poprzez żądanie GET). Każde kolejne żądanie wyświetlenia formularza
|
||||
(już za pomocą metody POST) nie powinno być zapisane w pamięci, ponieważ może zawierać dane podane przez użytkownika.
|
||||
Aby użyć takiego mechanizmu, należy ustawić opcję [[yii\widgets\FragmentCache::enabled|enabled]], jak w przykładzie poniżej:
|
||||
|
||||
```php
|
||||
if ($this->beginCache($id, ['enabled' => Yii::$app->request->isGet])) {
|
||||
|
||||
// ... generowanie zawartości w tym miejscu ...
|
||||
|
||||
$this->endCache();
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Zagnieżdżony zapis w pamięci <span id="nested-caching"></span>
|
||||
|
||||
Fragmenty zapisane w pamięci podręcznej mogą być zagnieżdżane. Oznacza to, że zapisany fragment może być częścią innego, również zapisanego w pamięci podręcznej.
|
||||
Przykładowo, komentarze mogą być zapisane jako fragmenty w pamięci podręcznej, które z kolei w całości również są zapisane jako większy fragment w pamięci.
|
||||
Poniższy kod pokazuje, w jaki sposób można zagnieździć dwa fragmenty w pamięci podręcznej:
|
||||
|
||||
```php
|
||||
if ($this->beginCache($id1)) {
|
||||
|
||||
// ... generowanie zawartości ...
|
||||
|
||||
if ($this->beginCache($id2, $options2)) {
|
||||
|
||||
// ... generowanie zawartości ...
|
||||
|
||||
$this->endCache();
|
||||
}
|
||||
|
||||
// ... generowanie zawartości ...
|
||||
|
||||
$this->endCache();
|
||||
}
|
||||
```
|
||||
|
||||
Zagnieżdżone fragmenty mogą mieć różne opcje zapisu. Dla przykładu, wewnętrzny i zewnętrzy fragment może mieć inną wartość czasu życia. Nawet w przypadku, gdy zawartość zapisana
|
||||
w zewnętrznym fragmencie straci ważność, wewnętrzny fragment wciąż będzie pobierany z pamięci. Nie zadziała to jednak w przeciwnym przypadku - dopóki zewnętrzny fragment będzie ważny,
|
||||
będzie zwracał tą samą zawartość za każdym razem, niezależnie od tego, czy zawartość wewnętrznego fragmentu już wygasła, czy nie. Z tego powodu należy zwrócić szczególną ostrożność
|
||||
przy ustalaniu czasu życia lub zależności zagnieżdżonych fragmentów, ponieważ "stara" zawartość może być wciąż niezamierzenie przechowywana w zewnętrznym fragmencie.
|
||||
|
||||
|
||||
## Dynamiczna zawartość <span id="dynamic-content"></span>
|
||||
|
||||
Używając pamięci podręcznej fragmentów, można napotkać na sytuację, kiedy duża część zawartości strony jest względnie statyczna z wyjątkiem kilku nielicznych miejsc.
|
||||
Przykładowo, nagłówek strony może wyświetlać pasek głównego menu razem z imieniem aktualnie zalogowanego użytkownika. Innym kłopotem może być to, że zapisywana w pamięci zawartość
|
||||
może zawierać kod PHP, który musi być wykonany dla każdego żądania (np. kod rejestrujący paczkę assetów). W obu tych przypadkach pomoże nam skorzystanie z funkcjonalności tzw.
|
||||
*dynamicznej zawartości*.
|
||||
|
||||
Dynamiczna zawartość oznacza fragment zwrotki, który nie powinien zostać zapisany w pamięci podręcznej, nawet jeśli znajduje się w bloku objętym zapisem. Aby określić zawartość jako
|
||||
dynamiczną, musi być ona generowana poprzez wykonanie jakiegoś kodu PHP dla każdego zapytania, nawet jeśli całość fragmentu serwowana jest z pamięci podręcznej.
|
||||
|
||||
Możesz wywołać metodę [[yii\base\View::renderDynamic()|renderDynamic()]] wewnątrz zapisywanego fragmentu, aby wstawić w danym miejscu zawartość dynamiczną, jak w przykładzie poniżej:
|
||||
|
||||
```php
|
||||
if ($this->beginCache($id1)) {
|
||||
|
||||
// ... generowanie zawartości ...
|
||||
|
||||
echo $this->renderDynamic('return Yii::$app->user->identity->name;');
|
||||
|
||||
// ... generowanie zawartości ...
|
||||
|
||||
$this->endCache();
|
||||
}
|
||||
```
|
||||
|
||||
Metoda [[yii\base\View::renderDynamic()|renderDynamic()]] przyjmuje jako parametr kod PHP.
|
||||
Wartość zwracana przez ten kod jest traktowana jako zawartość dynamiczna. Ten sam kod PHP będzie wykonany dla każdego zapytania, niezależnie od tego, czy obejmujący go fragment będzie
|
||||
pobierany z pamięci podręcznej czy też nie.
|
@ -1035,9 +1035,30 @@ Zwróć uwagę na to, że ten przykład różni się od poprzedniego, gdzie pobi
|
||||
|
||||
> Info: Jeśli [[yii\db\ActiveQuery|ActiveQuery]] zawiera warunek podany za pomocą [[yii\db\ActiveQuery::onCondition()|onCondition()]],
|
||||
> będzie on umieszczony w części instrukcji `ON` tylko jeśli kwerenda zawiera JOIN. W przeciwnym wypadku warunek ten będzie automatycznie
|
||||
> dodany do części `WHERE`.
|
||||
> dodany do części `WHERE`. Może zatem składać się z warunków opierających się tylko na kolumnach powiązanej tabeli.
|
||||
|
||||
|
||||
#### Aliasy dołączanych tabeli <span id="relation-table-aliases"></span>
|
||||
|
||||
Jak już wspomniano wcześniej, używając JOIN w kwerendzie, musimy ujednoznacznić nazwy kolumn. Z tego powodu często stosuje się aliasy dla tabel.
|
||||
Alias dla kwerendy relacyjnej można ustawić, modyfikując ją w następujący sposób:
|
||||
|
||||
```php
|
||||
$query->joinWith([
|
||||
'orders' => function ($q) {
|
||||
$q->from(['o' => Order::tableName()]);
|
||||
},
|
||||
])
|
||||
```
|
||||
|
||||
Powyższy sposób wygląda jednak na bardzo skomplikowany i wymaga ręcznej modyfikacji w kodzie nazwy tabeli obiektu relacji lub wywołania `Order::tableName()`.
|
||||
Od wersji 2.0.7, Yii udostępnia do tego celu skróconą metodę. Możliwe jest zdefiniowanie i używanie aliasu dla tabeli relacji w poniższy sposób:
|
||||
|
||||
```php
|
||||
// dołącz relację 'orders' i posortuj wyniki po 'orders.id'
|
||||
$query->joinWith(['orders o'])->orderBy('o.id');
|
||||
```
|
||||
|
||||
### Odwrócone relacje <span id="inverse-relations"></span>
|
||||
|
||||
Deklaracje relacji są zazwyczaj obustronne dla dwóch klas Active Record. Przykładowo `Customer` jest powiązany z `Order` poprzez relację `orders`,
|
||||
|
@ -74,6 +74,8 @@ use yii\widgets\ActiveForm;
|
||||
Należy pamiętać, aby dodać opcję `enctype` do formularza, przez co plik będzie mógł być prawidłowo przesłany.
|
||||
Wywołanie `fileInput()` spowoduje wyrenderowanie tagu `<input type="file">`, który pozwala użytkownikowi na wybranie oraz przesłanie pliku.
|
||||
|
||||
> Tip: od wersji 2.0.8, [[yii\web\widgets\ActiveField::fileInput|fileInput]] dodaje automatycznie opcję `enctype` do formularza, kiedy pole typu 'file input' jest używane.
|
||||
|
||||
## Implementacja kontrolera <span id="wiring-up"></span>
|
||||
|
||||
W akcji kontrolera musimy połączyć model oraz widok aby zaimplementować przesyłanie plików:
|
||||
|
@ -117,7 +117,6 @@ Możemy użyć metody klasy ActiveForm [yii\widgets\ActiveForm::dropDownList()|d
|
||||
|
||||
```php
|
||||
use app\models\ProductCategory;
|
||||
use yii\helpers\ArrayHelper;
|
||||
|
||||
/* @var $this yii\web\View */
|
||||
/* @var $form yii\widgets\ActiveForm */
|
||||
|
@ -648,3 +648,6 @@ Powyższy kod sprawdzi, czy zapytanie zostało wysłane przy użyciu AJAXa. Jeś
|
||||
|
||||
> Info: Możesz również użyć [walidacji kolejkowej](#deferred-validation) do wykonania walidacji AJAX, jednakże walidacja AJAXowa opisana w tej sekcji jest bardziej systematyczna i
|
||||
> wymaga mniej wysiłku przy kodowaniu.
|
||||
|
||||
Kiedy zarówno `enableClientValidation`, jak i `enableAjaxValidation` ustawione są na true, walidacja za pomocą AJAX zostanie uruchomiona dopiero po udanej
|
||||
walidacji po stronie klienta.
|
||||
|
@ -57,10 +57,10 @@ Metoda ta wymaga podania parametru page i zwraca poprawnie sformatowany adres UR
|
||||
// Jeśli nie będzie podana, użyta zostanie aktualna trasa
|
||||
$pagination->route = 'article/index';
|
||||
|
||||
// wyświetla: /index.php?r=article/index&page=100
|
||||
// wyświetla: /index.php?r=article%2Findex&page=100
|
||||
echo $pagination->createUrl(100);
|
||||
|
||||
// wyświetla: /index.php?r=article/index&page=101
|
||||
// wyświetla: /index.php?r=article%2Findex&page=101
|
||||
echo $pagination->createUrl(101);
|
||||
```
|
||||
|
||||
|
@ -210,7 +210,7 @@ Sprawdź jak to działa <span id="trying-it-out"></span>
|
||||
Aby zobaczyć jak działa powyższy kod, użyj przeglądarki i przejdź pod podany adres URL:
|
||||
|
||||
```
|
||||
http://hostname/index.php?r=country/index
|
||||
http://hostname/index.php?r=country%2Findex
|
||||
```
|
||||
|
||||

|
||||
@ -220,7 +220,7 @@ Jeśli klikniesz przycisk "2", zobaczysz stronę wyświetlającą pięć innych
|
||||
Zauważ, że adres URL w przeglądarce również się zmienił na
|
||||
|
||||
```
|
||||
http://hostname/index.php?r=country/index&page=2
|
||||
http://hostname/index.php?r=country%2Findex&page=2
|
||||
```
|
||||
|
||||
Za kulisami, [[yii\data\Pagination|Pagination]] dostarcza wszystkich niezbędnych funkcjonalności do stronicowania zbioru danych:
|
||||
|
@ -178,7 +178,7 @@ Próba <span id="trying-it-out"></span>
|
||||
Aby zobaczyć jak to działa, użyj przeglądarki i przejdź pod dany adres:
|
||||
|
||||
```
|
||||
http://hostname/index.php?r=site/entry
|
||||
http://hostname/index.php?r=site%2Fentry
|
||||
```
|
||||
|
||||
Zobaczysz stronę wyświetlającą formularz z dwoma polami. Przed każdym polem znajduje się etykieta opisująca to pole. Jeśli klikniesz przycisk "Wyślij" nie wpisując żadnych danych, lub
|
||||
|
@ -108,7 +108,7 @@ Sprawdzenie w działaniu <span id="trying-it-out"></span>
|
||||
Aby zobaczyć, jak działa nowo wygenerowany kod, użyj przeglądarki, aby uzyskać dostęp do podanego adresu URL:
|
||||
|
||||
```
|
||||
http://hostname/index.php?r=country/index
|
||||
http://hostname/index.php?r=country%2Findex
|
||||
```
|
||||
|
||||
Zobaczysz tabelę prezentującą kraje z bazy danych. Możesz sortować tabelę, lub filtrować ją przez wpisanie odpowiednich warunków w nagłówkach kolumn.
|
||||
|
@ -88,7 +88,7 @@ Próba <span id="trying-it-out"></span>
|
||||
Po utworzeniu akcji oraz widoku możesz uzyskać dostęp do nowej strony przez przejście pod podany adres URL:
|
||||
|
||||
```
|
||||
http://hostname/index.php?r=site/say&message=Hello+World
|
||||
http://hostname/index.php?r=site%2Fsay&message=Hello+World
|
||||
```
|
||||
|
||||

|
||||
|
@ -21,8 +21,10 @@ Instalacja przez Composer <span id="installing-via-composer"></span>
|
||||
Jeśli nie posiadasz jeszcze zainstalowanego Composera to możesz to zrobić podążając według zamieszczonych na [getcomposer.org](https://getcomposer.org/download/) instrukcji.
|
||||
W systemach operacyjnych Linux i Mac OS X należy wywołać następujące komendy:
|
||||
|
||||
curl -sS https://getcomposer.org/installer | php
|
||||
mv composer.phar /usr/local/bin/composer
|
||||
```bash
|
||||
curl -sS https://getcomposer.org/installer | php
|
||||
mv composer.phar /usr/local/bin/composer
|
||||
```
|
||||
|
||||
W systemie Windows należy pobrać i uruchomić [Composer-Setup.exe](https://getcomposer.org/Composer-Setup.exe).
|
||||
|
||||
@ -33,8 +35,10 @@ Jeśli posiadałeś już wcześniej zainstalowanego Composera, upewnij się, że
|
||||
|
||||
Z zainstalowanym Composerem możesz przejść do instalacji Yii wywołując poniższe komendy w katalogu dostępnym z poziomu sieci web:
|
||||
|
||||
composer global require "fxp/composer-asset-plugin:~1.1.1"
|
||||
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
|
||||
```bash
|
||||
composer global require "fxp/composer-asset-plugin:~1.1.1"
|
||||
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
|
||||
```
|
||||
|
||||
Pierwsza komenda instaluje [wtyczkę zasobów](https://github.com/francoispluchino/composer-asset-plugin/), która pozwala na zarządzanie zasobami [Bowera](http://bower.io) oraz
|
||||
[paczkami zależności NPM](https://www.npmjs.com/) przez Composer.
|
||||
@ -47,14 +51,16 @@ Druga komenda instaluje Yii w katalogu `basic`. Jeśli chcesz, możesz wybrać k
|
||||
|
||||
> Tip: Jeśli chcesz zainstalować najnowszą wersję deweloperską Yii, użyj poniższej komendy, która dodaje [opcję stabilności](https://getcomposer.org/doc/04-schema.md#minimum-stability):
|
||||
>
|
||||
> composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
|
||||
> ```bash
|
||||
> composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
|
||||
> ```
|
||||
>
|
||||
> Pamiętaj, że wersja deweloperska Yii nie powinna być używana w wersjach produkcyjnych aplikacji, ponieważ mogą wystąpić niespodziewane błędy.
|
||||
|
||||
Instalacja z pliku archiwum <span id="installing-from-archive-file"></span>
|
||||
-------------------------------
|
||||
|
||||
Instalacja Yii z pliku archiwum dotyczy trzech kroków:
|
||||
Instalacja Yii z pliku archiwum składa się z trzech kroków:
|
||||
|
||||
1. Pobranie pliku archiwum z [yiiframework.com](http://www.yiiframework.com/download/).
|
||||
2. Rozpakowanie pliku archiwum do katalogu dostępnego z poziomu sieci web.
|
||||
@ -82,33 +88,43 @@ Dostępne są również inne opcje instalacji:
|
||||
Sprawdzenie instalacji <span id="verifying-installation"></span>
|
||||
--------------------------
|
||||
|
||||
Po instalacji możesz użyć swojej przeglądarki, aby uzyskać dostęp do swojej aplikacji Yii przechodząc pod adres:
|
||||
Po zakończeniu instalacji, skonfiguruj swój serwer (zobacz następną sekcję) lub użyj
|
||||
[wbudowanego serwera PHP](https://secure.php.net/manual/en/features.commandline.webserver.php), uruchamiając poniższą komendę w konsoli z poziomu folderu
|
||||
`web` projektu:
|
||||
|
||||
```
|
||||
http://localhost/basic/web/index.php
|
||||
```bash
|
||||
php yii serve
|
||||
```
|
||||
|
||||
Powyższy wpis zakłada, że zainstalowałeś Yii w katalogu o nazwie `basic`, bezpośrednio jako katalog głównego katalogu serwera, oraz że serwer jest uruchomiony na Twojej lokalnej
|
||||
maszynie ('localhost').
|
||||
Być może będziesz musiał dostosować go do Twojego środowiska instalacyjnego.
|
||||
> Note: Domyślnym portem, na którym serwer HTTP nasłuchuje, jest 8080. Jeśli jednak ten port jest już w użyciu lub też chcesz obsłużyć wiele aplikacji w ten sposób,
|
||||
możesz podać inny numer portu, dodając argument --port:
|
||||
|
||||

|
||||
```bash
|
||||
php yii serve --port=8888
|
||||
```
|
||||
|
||||
Możesz teraz użyć swojej przeglądarki, aby uzyskać dostęp do zainstalowanej aplikacji Yii przechodząc pod adres:
|
||||
|
||||
Na stronie w przeglądarce powinienieś zobaczyć napis "Congratulations!". Jeśli nie, sprawdź czy zainstalowana wersja PHP jest wystarczająca do wymagań Yii.
|
||||
```
|
||||
http://localhost:8080/
|
||||
```
|
||||
|
||||

|
||||
|
||||
Powinienieś zobaczyć stronę z napisem "Congratulations!" (Gratulacje!). Jeśli nie, sprawdź czy zainstalowane elementy środowiska spełniają wymagania Yii.
|
||||
Możesz sprawdzić minimalne wymagania na dwa sposoby:
|
||||
|
||||
* Używając przeglądarki przejdź pod adres `http://localhost/basic/requirements.php`
|
||||
* Wywołaj poniższą komendę:
|
||||
* Skopiuj plik `/requirements.php` do `/web/requirements.php`, a następnie przejdź do przeglądarki i uruchom go przechodząc pod adres `http://localhost/requirements.php`
|
||||
* Lub też uruchom następujące komendy:
|
||||
|
||||
```
|
||||
cd basic
|
||||
php requirements.php
|
||||
```
|
||||
```bash
|
||||
cd basic
|
||||
php requirements.php
|
||||
```
|
||||
|
||||
Powinienieś skonfigurować swoją instalację PHP tak, aby spełniała minimalne wymogi Yii. Najważniejszym z nich jest posiadanie PHP w wersji 5.4 lub wyższej. Powinienieś również
|
||||
zainstalować [rozszerzenie PDO](http://www.php.net/manual/en/pdo.installation.php) oraz odpowiedni sterownik bazy danych (np. `pdo_mysql` dla bazy danych MySQL), jeśli Twoja aplikacja
|
||||
potrzebuje bazy danych.
|
||||
Powinienieś skonfigurować swoją instalację PHP tak, aby spełniała minimalne wymogi Yii. Najważniejszym z nich jest posiadanie PHP w wersji 5.4 lub wyższej.
|
||||
Powinienieś również zainstalować [rozszerzenie PDO](http://www.php.net/manual/en/pdo.installation.php) oraz odpowiedni sterownik bazy danych (np. `pdo_mysql` dla bazy danych
|
||||
MySQL), jeśli Twoja aplikacja potrzebuje bazy danych.
|
||||
|
||||
|
||||
Konfigurowanie serwerów WWW <span id="configuring-web-servers"></span>
|
||||
@ -140,7 +156,7 @@ Blokowanie dostępu do tych folderów jest dużą poprawą bezpieczeństwa.
|
||||
Użyj następującej konfiguracji serwera Apache w pliku `httpd.conf` lub w konfiguracji wirtualnego hosta.
|
||||
Pamiętaj, że musisz zamienić ścieżkę `path/to/basic/web` na aktualną ścieżkę do `basic/web` Twojej aplikacji.
|
||||
|
||||
```
|
||||
```apache
|
||||
# Ustaw główny katalog na "basic/web"
|
||||
DocumentRoot "path/to/basic/web"
|
||||
|
||||
@ -160,16 +176,16 @@ DocumentRoot "path/to/basic/web"
|
||||
### Zalecane ustawienia Nginx <span id="recommended-nginx-configuration"></span>
|
||||
|
||||
Aby użyć [Nginx](http://wiki.nginx.org/) powinienieś zainstalować PHP jako [FPM SAPI](http://php.net/install.fpm).
|
||||
Możesz użyć przedstawionej poniżej konfiguracji Nginx, zastępując jedynie ścieżkę `path/to/basic/web` aktualną ścieżką do `basic/web` Twojej aplikacji oraz `mysite.local` aktualną
|
||||
nazwą hosta.
|
||||
Możesz użyć przedstawionej poniżej konfiguracji Nginx, zastępując jedynie ścieżkę `path/to/basic/web` aktualną ścieżką do `basic/web` Twojej aplikacji oraz
|
||||
`mysite.local` aktualną nazwą hosta.
|
||||
|
||||
```
|
||||
```nginx
|
||||
server {
|
||||
charset utf-8;
|
||||
client_max_body_size 128M;
|
||||
|
||||
listen 80; ## nasłuchuj ipv4
|
||||
#listen [::]:80 default_server ipv6only=on; ## listen for ipv6
|
||||
#listen [::]:80 default_server ipv6only=on; ## nasłuchuj ipv6
|
||||
|
||||
server_name mysite.local;
|
||||
root /path/to/basic/web;
|
||||
@ -183,7 +199,7 @@ server {
|
||||
try_files $uri $uri/ /index.php?$args;
|
||||
}
|
||||
|
||||
# odkomentuj aby uniknąć przetwarzania żądań do nieistniejących plików przez Yii
|
||||
# dkomentuj aby uniknąć przetwarzania żądań do nieistniejących plików przez Yii
|
||||
#location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
|
||||
# try_files $uri =404;
|
||||
#}
|
||||
|
116
docs/guide-pl/tutorial-shared-hosting.md
Normal file
116
docs/guide-pl/tutorial-shared-hosting.md
Normal file
@ -0,0 +1,116 @@
|
||||
Współdzielone środowisko hostujące
|
||||
==================================
|
||||
|
||||
Współdzielone środowiska hostujące są często ograniczone, jeśli chodzi o możliwości ich konfiguracji i struktury folderów. Pomimo to, wciąż, w większości przypadków,
|
||||
możesz w takim środowisku uruchomić Yii 2.0 po kilku drobnych modyfikacjach.
|
||||
|
||||
Wdrożenie podstawowej aplikacji
|
||||
-------------------------------
|
||||
|
||||
W standardowym współdzielonym środowisku hostującym jest zwykle tylko jeden główny folder publiczny (webroot), zatem wygodniej jest stosować podstawowy szablon projektu.
|
||||
Korzystając z instrukcji w sekcji [Instalowanie Yii](start-installation.md), zainstaluj taki szablon lokalnie. Po udanej instalacji, dokonamy kilku modyfikacji, aby aplikacji
|
||||
mogła działać na współdzielonym środowisku.
|
||||
|
||||
### Zmiana nazwy webroota <span id="renaming-webroot"></span>
|
||||
|
||||
Połącz się ze swoim współdzielonym hostem za pomocą np. klienta FTP. Prawdopodobnie zobaczysz listę folderów podobną do poniższej.
|
||||
|
||||
```
|
||||
config
|
||||
logs
|
||||
www
|
||||
```
|
||||
|
||||
W tym przykładzie, `www` jest folderem webroot. Folder ten może mieć różne nazwy, zwykle stosowane są: `www`, `htdocs` i `public_html`.
|
||||
|
||||
Webroot w naszym podstawowym szablonie projektu nazywa się `web`. Przed skopiowaniem aplikacji na serwer, zmień nazwę lokalnego folderu webroot, aby odpowiadała folderowi
|
||||
na serwerze, czyli z `web` na `www`, `public_html` lub na inną nazwę, która używana jest na serwerze.
|
||||
|
||||
### Folder root FTP jest zapisywalny
|
||||
|
||||
Jeśli masz prawa zapisu w folderze poziomu root, czyli tam, gdzie znajdują się foldery `config`, `logs` i `www`, skopiuj foldery `assets`, `commands` itd. bezpośrednio w to
|
||||
miejsce.
|
||||
|
||||
### Dodatkowe opcje serwera <span id="add-extras-for-webserver"></span>
|
||||
|
||||
Jeśli Twój serwer to Apache, będziesz musiał dodać plik `.htaccess` z poniższą zawartością do folderu `web` (czy też `public_html`, bądź jakakolwiek jest jego nazwa),
|
||||
gdzie znajduje się plik `index.php`:
|
||||
|
||||
```
|
||||
Options +FollowSymLinks
|
||||
IndexIgnore */*
|
||||
|
||||
RewriteEngine on
|
||||
|
||||
# jeśli katalog lub plik istnieje, użyj go bezpośrednio
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
|
||||
# w innym przypadku przekieruj żądanie na index.php
|
||||
RewriteRule . index.php
|
||||
```
|
||||
|
||||
W przypadku serwera nginx nie powinieneś potrzebować dodatkowego pliku konfiguracyjnego.
|
||||
|
||||
### Sprawdzenie wymagań
|
||||
|
||||
Aby uruchomić Yii, Twój serwer musi spełniać jego wymagania. Minimalnym wymaganiem jest PHP w wersji 5.4. Możesz sprawdzić wszystkie wymagania, kopiując plik
|
||||
`requirements.php` z folderu root do folderu webroot i uruchamiając go w przeglądarce pod adresem `http://example.com/requirements.php`.
|
||||
Nie zapomnij o skasowaniu tego pliku po sprawdzeniu wymagań.
|
||||
|
||||
|
||||
Wdrożenie zaawansowanej aplikacji
|
||||
---------------------------------
|
||||
|
||||
Wdrażanie zaawansowanej aplikacji na współdzielonym środowisku jest odrobinę bardziej problematyczne, niż w przypadku podstawowej aplikacji, ponieważ wymaga ona dwóch folderów
|
||||
webroot, czego zwykle nie wspierają serwery środowisk współdzielonych. Będziemy musieli odpowiednio dostosować strukturę folderów.
|
||||
|
||||
### Przeniesienie skryptów wejściowych do jednego folderu webroot
|
||||
|
||||
Na początek potrzebujemy folderu webroot. Stwórz nowy folder i nazwij go tak, jak webroot docelowego serwera, jak opisane zostało to w
|
||||
[Zmiana nazwy webroota](#renaming-webroot) powyżej, np. `www` czy też `public_html`. Następnie utwórz poniższą strukturę, gdzie `www` jest folderem webroot,
|
||||
który właśnie stworzyłeś:
|
||||
|
||||
```
|
||||
www
|
||||
admin
|
||||
backend
|
||||
common
|
||||
console
|
||||
environments
|
||||
frontend
|
||||
...
|
||||
```
|
||||
|
||||
`www` będzie naszym folderem frontend, zatem przenieś tam zawartość `frontend/web`. Do folderu `www/admin` przenieś zawartość `backend/web`.
|
||||
W każdym przypadku będziesz musiał zmodyfikować ścieżki w plikach `index.php` i `index-test.php`.
|
||||
|
||||
### Rozdzielone sesje i ciasteczka
|
||||
|
||||
Backend i frontend zostały stworzone z myślą o uruchamianiu ich z poziomu oddzielnych domen. Jeśli uruchamiamy je z poziomu jednej domeny, frontend i backend będą dzielić
|
||||
te same ciasteczka, co może wywołać konflikty. Aby temu zapobiec, zmodyfikuj backendową konfigurację aplikacji `backend/config/main.php` jak poniżej:
|
||||
|
||||
```php
|
||||
'components' => [
|
||||
'request' => [
|
||||
'csrfParam' => '_backendCSRF',
|
||||
'csrfCookie' => [
|
||||
'httpOnly' => true,
|
||||
'path' => '/admin',
|
||||
],
|
||||
],
|
||||
'user' => [
|
||||
'identityCookie' => [
|
||||
'name' => '_backendIdentity',
|
||||
'path' => '/admin',
|
||||
'httpOnly' => true,
|
||||
],
|
||||
],
|
||||
'session' => [
|
||||
'name' => 'BACKENDSESSID',
|
||||
'cookieParams' => [
|
||||
'path' => '/admin',
|
||||
],
|
||||
],
|
||||
],
|
||||
```
|
Reference in New Issue
Block a user