Merge branch 'guide-pl' of https://github.com/bizley/yii2 into guide-pl

This commit is contained in:
Daniel Filipek
2016-01-11 08:42:45 +01:00
4 changed files with 113 additions and 113 deletions

View File

@@ -1,10 +1,10 @@
Walidacja danych wejściowych Walidacja danych wejściowych
================ ================
Jednak z głownych zasad mówi, że nigdy nie powinno ufać się danym otrzymanym od użytkowników oraz zawsze je walidować przez ich użyciem. Jedna z głównych zasad mówi, że nigdy nie powinno ufać się danym otrzymanym od użytkowników oraz zawsze je walidować przez użyciem.
Mamy [model](structure-models.md) wypełniony danymi od użytkownika. Możemy go zwalidować przez wywołanie metody [[yii\base\Model::validate()]]. Mamy [model](structure-models.md) wypełniony danymi od użytkownika. Możemy go zwalidować przez wywołanie metody [[yii\base\Model::validate()|validate()]].
Metoda zwróci wartość `boolean` wskazującą czy walidacja się powiodła, czy nie. Jeśli nie, możesz pobrać wiadomości błędów za pomocą właściwości [[yii\base\Model::errors]]. Metoda zwróci wartość `boolean` wskazującą, czy walidacja się powiodła, czy nie. Jeśli nie, możesz pobrać informacje o błędach za pomocą właściwości [[yii\base\Model::errors|errors]].
Dla przykładu, Dla przykładu,
```php ```php
@@ -26,8 +26,8 @@ if ($model->validate()) {
## Deklaracja zasad <span id="declaring-rules"></span> ## Deklaracja zasad <span id="declaring-rules"></span>
Aby metoda `validate()` naprawdę zadziałała, powinieneś zadeklarować zasady walidacji dla atrybutów które mają jej podlegać. Aby metoda [[yii\base\Model::validate()|validate()]] naprawdę zadziałała, powinieneś zadeklarować zasady walidacji dla atrybutów, które mają jej podlegać.
Powinno zostać to zrobione przez nadpisanie metody [[yii\base\Model::rules()]]. Poniższy przykład pokazuje jak zostały zadeklarowane zasady walidacji dla modelu `ContactForm`: Powinno zostać to zrobione przez nadpisanie metody [[yii\base\Model::rules()|rules()]]. Poniższy przykład pokazuje jak zostały zadeklarowane zasady walidacji dla modelu `ContactForm`:
```php ```php
public function rules() public function rules()
@@ -46,7 +46,7 @@ Metoda [[yii\base\Model::rules()|rules()]] powinna zwracać tablicę zasad, gdzi
```php ```php
[ [
// wymagane, określa atrybut który powinien zostać zwalidowany przez tą zasadę. // wymagane, określa atrybut który powinien zostać zwalidowany przez tę zasadę.
// Dla pojedyńczego atrybutu możemy użyć bezpośrednio jego nazwy, bez osadzania go w tablicy // Dla pojedyńczego atrybutu możemy użyć bezpośrednio jego nazwy, bez osadzania go w tablicy
['attribute1', 'attribute2', ...], ['attribute1', 'attribute2', ...],
@@ -54,9 +54,9 @@ Metoda [[yii\base\Model::rules()|rules()]] powinna zwracać tablicę zasad, gdzi
// Może to być nazwa klasy, alias walidatora lub nazwa metody walidacji // Może to być nazwa klasy, alias walidatora lub nazwa metody walidacji
'validator', 'validator',
// opcjonalny, określa w którym scenariuszu/scenariuszach ta zasada powinna zostać użyta // opcjonalny, określa, w którym scenariuszu/scenariuszach ta zasada powinna zostać użyta
// w przypadku nie podania żadnego argumentu zasada zostanie zaaplikowana do wszystkich scenariuszy // w przypadku nie podania żadnego argumentu zasada zostanie zaaplikowana do wszystkich scenariuszy
// Możesz również skonfigurować opcję "except" jeśli chcesz użyć tej zasady dla wszystkich scenariuszy oprócz tych wymienionych przez Ciebie // Możesz również skonfigurować opcję "except" jeśli chcesz użyć tej zasady dla wszystkich scenariuszy. oprócz tych wymienionych przez Ciebie
'on' => ['scenario1', 'scenario2', ...], 'on' => ['scenario1', 'scenario2', ...],
// opcjonalny, określa dodatkowe konfiguracje do obiektu walidatora // opcjonalny, określa dodatkowe konfiguracje do obiektu walidatora
@@ -65,7 +65,7 @@ Metoda [[yii\base\Model::rules()|rules()]] powinna zwracać tablicę zasad, gdzi
``` ```
Dla każdej z zasad musisz określić co najmniej jeden atrybut, którego ma ona dotyczyć, oraz należy określić typ tej zasady. Dla każdej z zasad musisz określić co najmniej jeden atrybut, którego ma ona dotyczyć, oraz należy określić typ tej zasady.
Możesz określić typ zasady jako jedna z następujących form: Możesz określić typ zasady jako jedną z następujących form:
* alias walidatora podstawowego, np. `required`, `in`, `date` itd. Zajrzyj do sekcji [Podstawowe walidatory](tutorial-core-validators.md) aby uzyskać pełną listę walidatorów podstawowych. * alias walidatora podstawowego, np. `required`, `in`, `date` itd. Zajrzyj do sekcji [Podstawowe walidatory](tutorial-core-validators.md) aby uzyskać pełną listę walidatorów podstawowych.
* nazwa metody walidacji w klasie modelu, lub funkcja anonimowa. Po więcej szczegółów zajrzyj do sekcji [Inline Validators](#inline-validators). * nazwa metody walidacji w klasie modelu, lub funkcja anonimowa. Po więcej szczegółów zajrzyj do sekcji [Inline Validators](#inline-validators).
@@ -75,17 +75,16 @@ Zasada może zostać użyta do walidacji jednego lub wielu atrybutów, a atrybut
Zasada może zostać użyta dla konkretnych [scenariuszy](structure-models.md#scenarios) przez określenie opcji `on`. Zasada może zostać użyta dla konkretnych [scenariuszy](structure-models.md#scenarios) przez określenie opcji `on`.
Jeśli nie określisz opcji `on` oznacza to, że zasada zostanie użyta w każdym scenariuszu. Jeśli nie określisz opcji `on` oznacza to, że zasada zostanie użyta w każdym scenariuszu.
Kiedy zostaje wywołana metoda `validate()` zostają wykonane następujące kroki w celu wykonania walidacji: Kiedy zostaje wywołana metoda [[yii\base\Model::validate()|validate()]] zostają wykonane następujące kroki w celu wykonania walidacji:
1. Określenie które atrybuty powinny zostać zwalidowane przez pobranie listy atrybutów z [[yii\base\Model::scenarios()]] używając aktualnego [[yii\base\Model::scenario|scenario]]. 1. Określenie które atrybuty powinny zostać zwalidowane przez pobranie listy atrybutów z [[yii\base\Model::scenarios()|scenarios()]] używając aktualnego
Wybrane atrybuty nazywane są *atrybutami aktywnymi*. [[yii\base\Model::scenario|scenario]]. Wybrane atrybuty nazywane są *atrybutami aktywnymi*.
2. Określenie które zasady walidacji powinny zostać użyte przez pobranie listy zasad z [[yii\base\Model::rules()]] używając aktualnego [[yii\base\Model::scenario|scenario]]. 2. Określenie które zasady walidacji powinny zostać użyte przez pobranie listy zasad z [[yii\base\Model::rules()|rules()]] używając aktualnego [[yii\base\Model::scenario|scenario]].
Wybrane zasady nazywane są *zasadami aktywnymi*. Wybrane zasady nazywane są *zasadami aktywnymi*.
3. Użycie każdej aktywnej zasady do walidacji każdego aktywnego atrybutu, który jest powiązany do konkretnej zasady. 3. Użycie każdej aktywnej zasady do walidacji każdego aktywnego atrybutu, który jest powiązany do konkretnej zasady. Zasady walidacji są wykonywane w kolejności w jakiej zostały zapisane.
Zasady walidacji są wykonywane w kolejności w jakiej zostały zapisane.
Odnosząc się do powyższych kroków walidacji, atrybut zostanie zwalidowany wtedy i tylko wtedy, gdy jest on aktywnym atrybutem zadeklarowanym w `scenarios()` oraz jest powiązany z jedną, lub wieloma, Odnosząc się do powyższych kroków walidacji, atrybut zostanie zwalidowany wtedy i tylko wtedy, gdy jest on aktywnym atrybutem zadeklarowanym w
aktywnymi zasadami zadeklarowanymi w `rules()`. [[yii\base\Model::scenarios()|scenarios()]] oraz jest powiązany z jedną lub wieloma aktywnymi zasadami zadeklarowanymi w [[yii\base\Model::rules()|rules()]].
### Dostosowywanie wiadomości błedów <span id="customizing-error-messages"></span> ### Dostosowywanie wiadomości błedów <span id="customizing-error-messages"></span>
@@ -93,7 +92,7 @@ aktywnymi zasadami zadeklarowanymi w `rules()`.
Większość walidatorów posiada domyślne wiadomości błędów, które zostaną dodane do poddanego walidacji modelu, kiedy któryś z atrybutów nie przejdzie walidacji. Większość walidatorów posiada domyślne wiadomości błędów, które zostaną dodane do poddanego walidacji modelu, kiedy któryś z atrybutów nie przejdzie walidacji.
Dla przykładu, walidator [[yii\validators\RequiredValidator|required]] doda wiadomość "Username cannot be blank." do modelu, jeśli atrybut `username` nie przejdzie walidacji tej zasady. Dla przykładu, walidator [[yii\validators\RequiredValidator|required]] doda wiadomość "Username cannot be blank." do modelu, jeśli atrybut `username` nie przejdzie walidacji tej zasady.
Możesz dostosować wiadomość błedu danej zasady przez określenie właściwości `message` przy deklaracji zasady. Możesz dostosować wiadomość błędu danej zasady przez określenie właściwości `message` przy deklaracji zasady.
Dla przykładu, Dla przykładu,
```php ```php
@@ -105,19 +104,19 @@ public function rules()
} }
``` ```
Niektóre walidatory mogą wspierać dodatkowe wiadomości błedów aby bardziej precyzyjnie określić problemy przy walidacji. Niektóre walidatory mogą wspierać dodatkowe wiadomości błedów, aby bardziej precyzyjnie określić problemy przy walidacji.
Dla przykładu, walidator [[yii\validators\NumberValidator|number]] wspiera [[yii\validators\NumberValidator::tooBig|tooBig]] oraz [[yii\validators\NumberValidator::tooSmall|tooSmall]] Dla przykładu, walidator [[yii\validators\NumberValidator|number]] dodaje [[yii\validators\NumberValidator::tooBig|tooBig]] oraz [[yii\validators\NumberValidator::tooSmall|tooSmall]]
do opisania kiedy liczba jest za duża lub za mała podczas walidacji. Możesz skonfigurować te wiadomości tak, jak pozostałe właściwości walidatorów w zasadzie walidacji. do opisania sytuacji, kiedy liczba jest za duża lub za mała podczas walidacji. Możesz skonfigurować te wiadomości tak, jak pozostałe właściwości walidatorów w zasadzie walidacji.
### Zdarzenia walidacji <span id="validation-events"></span> ### Zdarzenia walidacji <span id="validation-events"></span>
Podczas wywołania metody [[yii\base\Model::validate()]], zostaną wywołane dwie metody, które możesz nadpisać, aby dostosować proces walidacji: Podczas wywołania metody [[yii\base\Model::validate()|validate()]] zostaną wywołane dwie metody, które możesz nadpisać, aby dostosować proces walidacji:
* [[yii\base\Model::beforeValidate()]]: domyślna implementacja wywoła zdarzenie [[yii\base\Model::EVENT_BEFORE_VALIDATE]]. Możesz nadpisać tą metodę lub odnieść się do tego zdarzenia aby wykonać * [[yii\base\Model::beforeValidate()|beforeValidate()]]: domyślna implementacja wywoła zdarzenie [[yii\base\Model::EVENT_BEFORE_VALIDATE|EVENT_BEFORE_VALIDATE]]. Możesz nadpisać tę
dodatkowe operacje przed walidacją. Metoda powinna zwracać wartość `boolean` wskazującą, czy walidacja powinna zostać wykonana, czy nie. metodę lub odnieść się do zdarzenia, aby wykonać dodatkowe operacje przed walidacją. Metoda powinna zwracać wartość `boolean` wskazującą, czy walidacja powinna zostać wykonana, czy nie.
* [[yii\base\Model::afterValidate()]]: domyślne implementacja wywoła zdarzenie [[yii\base\Model::EVENT_AFTER_VALIDATE]]. Możesz nadpisać tą metodę lub odnieść się do tego zdarzenia aby wykonać * [[yii\base\Model::afterValidate()|afterValidate()]]: domyślna implementacja wywoła zdarzenie [[yii\base\Model::EVENT_AFTER_VALIDATE|EVENT_AFTER_VALIDATE]]. Możesz nadpisać tę metodę
dodatkowe operacje po zakończonej walidacji. lub odnieść się do zdarzenia, aby wykonać dodatkowe operacje po zakończonej walidacji.
### Walidacja warunkowa <span id="conditional-validation"></span> ### Walidacja warunkowa <span id="conditional-validation"></span>
@@ -133,19 +132,19 @@ Aby zwalidować atrybuty tylko wtedy, gdy zostaną spełnione pewne założenia,
] ]
``` ```
Właściwość [[yii\validators\Validator::when|when]] pobiera możliwą do wywołania funkcję PHP z następującą normą: Właściwość [[yii\validators\Validator::when|when]] pobiera możliwą do wywołania funkcję PHP z następującą definicją:
```php ```php
/** /**
* @param Model $model model który podlega walidacji * @param Model $model model, który podlega walidacji
* @param string $attribute atrybut który podlega walidacji * @param string $attribute atrybut, który podlega walidacji
* @return boolean wartość zwrotna, czy reguła powinna zostać zastosowana * @return boolean wartość zwrotna; czy reguła powinna zostać zastosowana
*/ */
function ($model, $attribute) function ($model, $attribute)
``` ```
Jeśli potrzebujesz również wsparcia walidacji warunkowej po stronie użytkownika, powinieneś skonfigurować właściwość [[yii\validators\Validator::whenClient|whenClient]], Jeśli potrzebujesz również wsparcia walidacji warunkowej po stronie użytkownika, powinieneś skonfigurować właściwość [[yii\validators\Validator::whenClient|whenClient]],
która przyjmuje wartość string reprezentującą funkcję JavaScript, zwracającą wartość `boolean`, która będzie określała, czy zasada powinna zostać zastosowana, czy nie. która przyjmuje wartość `string` reprezentującą funkcję JavaScript, zwracającą wartość `boolean`, która będzie określała, czy zasada powinna zostać zastosowana, czy nie.
Dla przykładu, Dla przykładu,
```php ```php
@@ -161,10 +160,11 @@ Dla przykładu,
### Filtrowanie danych <span id="data-filtering"></span> ### Filtrowanie danych <span id="data-filtering"></span>
Dane od użytkownika często muszą zostać przefiltrowane. Dla przykładu, możesz chcieć wyciąć znaki spacji dookoła pola `username`. Dane od użytkownika często muszą zostać przefiltrowane. Dla przykładu, możesz chcieć wyciąć znaki spacji na początku i na końcu pola `username`.
Aby osiągnąć ten cel, możesz użyć zasad walidacji. Aby osiągnąć ten cel, możesz użyć zasad walidacji.
Poniższy przykład pokazuje jak wyciąć znaki spacji z pola oraz zmienić puste pole na wartość `NULL` przy użyciu podstawowych walidatorów [trim](tutorial-core-validators.md#trim) oraz [default](tutorial-core-validators.md#default): Poniższy przykład pokazuje, jak wyciąć znaki spacji z pola oraz zmienić puste pole na wartość `NULL` przy użyciu podstawowych walidatorów [trim](tutorial-core-validators.md#trim) oraz
[default](tutorial-core-validators.md#default):
```php ```php
[ [
@@ -173,14 +173,14 @@ Poniższy przykład pokazuje jak wyciąć znaki spacji z pola oraz zmienić pust
] ]
``` ```
Możesz użyć również bardziej ogólnego walidatora [filter](tutorial-core-validators.md#filter) aby przeprowadzić bardziej złożone filtrowanie. Możesz użyć również bardziej ogólnego walidatora [filter](tutorial-core-validators.md#filter), aby przeprowadzić bardziej złożone filtrowanie.
Jak możesz zauważyć, te zasady walidacji tak naprawdę nie walidują danych. Zamiast tego, przetwarzają wartości a następnie przypisują je do atrybutów które zostały poddane walidacji. Jak pewnie zauważyłeś, te zasady walidacji tak naprawdę nie walidują danych. Zamiast tego przetwarzają wartości, a następnie przypisują je do atrybutów, które zostały poddane walidacji.
### Obsługa pustych danych wejściowych <span id="handling-empty-inputs"></span> ### Obsługa pustych danych wejściowych <span id="handling-empty-inputs"></span>
Kiedy dane wejściowe są wysłane przez formularz HTML, często zachodzi potrzeba przypisania im domyślnych wartości, jeśli są puste. Kiedy dane wejściowe są wysłane przez formularz HTML, często zachodzi potrzeba przypisania im domyślnych wartości jeśli są puste.
Możesz to osiągnąć przez użycie walidatora [default](tutorial-core-validators.md#default). Dla przykładu, Możesz to osiągnąć przez użycie walidatora [default](tutorial-core-validators.md#default). Dla przykładu,
```php ```php
@@ -193,8 +193,8 @@ Możesz to osiągnąć przez użycie walidatora [default](tutorial-core-validato
] ]
``` ```
Domyślnie, pole uważane jest za puste jeśli jego wartość to pusty string, pusta tablica lub `NULL`. Domyślnie pole uważane jest za puste, jeśli jego wartość to pusty string, pusta tablica lub `NULL`.
Możesz dostosować domyślną logikę wykrywania pustych pól przez skonfigurowanie parametru [[yii\validators\Validator::isEmpty]], przekazując mu funkcję PHP. Możesz dostosować domyślną logikę wykrywania pustych pól przez skonfigurowanie parametru [[yii\validators\Validator::isEmpty|isEmpty]], przekazując mu funkcję PHP.
Dla przykładu, Dla przykładu,
```php ```php
@@ -205,15 +205,16 @@ Dla przykładu,
] ]
``` ```
> Note: Większość walidatorów nie obsługuje pustych pól jeśli ich właściwość [[yii\base\Validator::skipOnEmpty] przyjmuje domyślnie wartość `true`. > Note: Większość walidatorów nie obsługuje pustych pól, jeśli ich właściwość [[yii\base\Validator::skipOnEmpty|skipOnEmpty] przyjmuje domyślnie wartość `true`.
Zostaną one po prostu pominięte podczas walidacji jeśli ich powiązany atrybut otrzyma wartość uznawaną za pustą. Zostaną one po prostu pominięte podczas walidacji, jeśli ich powiązany atrybut otrzyma wartość uznawaną za pustą.
Wśród [podstawowych walidatorów](tutorial-core-validators.md), tylko walidatory ``captcha`, `default`, `filter`, `required`, oraz `trim` obsłużą puste pola. Wśród [podstawowych walidatorów](tutorial-core-validators.md), tylko walidatory `captcha`, `default`, `filter`, `required` oraz `trim` obsługują puste pola.
## Walidacja "Ad Hoc" <span id="ad-hoc-validation"></span> ## Walidacja "Ad Hoc" <span id="ad-hoc-validation"></span>
Czasami potrzebna będzie walidacja *ad hoc* dla wartości które nie są powiązane z żadnym modelem. Czasami potrzebna będzie walidacja *ad hoc* dla wartości które nie są powiązane z żadnym modelem.
Jeśli potrzebujesz wykonać tylko jeden typ walidacji (np. walidacja adresu email), możesz wywołać metodę [[yii\validators\Validator::validate()|validate()]] wybranego walidatora, tak jak poniżej: Jeśli potrzebujesz wykonać tylko jeden typ walidacji (np. walidacja adresu email), możesz wywołać metodę [[yii\validators\Validator::validate()|validate()]] wybranego walidatora, tak
jak poniżej:
```php ```php
$email = 'test@example.com'; $email = 'test@example.com';
@@ -228,7 +229,7 @@ if ($validator->validate($email, $error)) {
> Note: Nie każdy walidator wspiera tego typu walidację. Dla przykładu, podstawowy walidator [unique](tutorial-core-validators.md#unique) został zaprojektowany do pracy wyłącznie z modelami. > Note: Nie każdy walidator wspiera tego typu walidację. Dla przykładu, podstawowy walidator [unique](tutorial-core-validators.md#unique) został zaprojektowany do pracy wyłącznie z modelami.
Jeśli potrzebujesz przeprowadzić wielokrotne walidacje, możesz użyć [[yii\base\DynamicModel]], który wspiera deklarację atrybutów oraz zasad walidacji "w locie". Jeśli potrzebujesz przeprowadzić wielokrotne walidacje, możesz użyć [[yii\base\DynamicModel|DynamicModel]], który wspiera deklarację atrybutów oraz zasad walidacji "w locie".
Dla przykładu, Dla przykładu,
```php ```php
@@ -247,8 +248,8 @@ public function actionSearch($name, $email)
} }
``` ```
Metoda [[yii\base\DynamicModel::validateData()]] tworzy instancję `DynamicModel`, definiuje atrybuty używając przekazanych danych (`name` oraz `email` w tym przykładzie), Metoda [[yii\base\DynamicModel::validateData()|validateData()]] tworzy instancję `DynamicModel`, definiuje atrybuty używając przekazanych danych (`name` oraz `email` w tym przykładzie),
a następnie wywołuje metodę [[yii\base\Model::validate()]] z podanymi zasadami walidacji. a następnie wywołuje metodę [[yii\base\Model::validate()|validate()]] z podanymi zasadami walidacji.
Alternatywnie, możesz użyć bardziej "klasycznego" zapisu to przeprowadzenia tego typu walidacji: Alternatywnie, możesz użyć bardziej "klasycznego" zapisu to przeprowadzenia tego typu walidacji:
@@ -268,9 +269,9 @@ public function actionSearch($name, $email)
} }
``` ```
Po walidacji możesz sprawdzić, czy przebiegła ona poprawnie, lub nie, przez wywołanie metody [[yii\base\DynamicModel::hasErrors()|hasErrors()]], Po walidacji możesz sprawdzić, czy przebiegła ona poprawnie lub nie, przez wywołanie metody [[yii\base\DynamicModel::hasErrors()|hasErrors()]],
a następnie pobrać błędy walidacji z właściwości [[yii\base\DynamicModel::errors|errors]], tak jak w normalnym modelu. a następnie pobrać błędy walidacji z właściwości [[yii\base\DynamicModel::errors|errors]], tak jak w normalnym modelu.
Możesz również uzyskać dostęp do dynamicznych atrybutów tej instancji modelu, np. `$model->name` and `$model->email`. Możesz również uzyskać dostęp do dynamicznych atrybutów tej instancji, np. `$model->name` and `$model->email`.
## Tworzenie walidatorów <span id="creating-validators"></span> ## Tworzenie walidatorów <span id="creating-validators"></span>
@@ -279,7 +280,7 @@ Oprócz używania [podstawowych walidatorów](tutorial-core-validators.md) doł
### Walidatory wbudowane <span id="inline-validators"></span> ### Walidatory wbudowane <span id="inline-validators"></span>
Wbudowany walidator jest zdefiniowaną w modelu metodą lub funkcją anonimową. Zapis tej metody/funkcji jest następujący: Wbudowany walidator jest zdefiniowaną w modelu metodą lub funkcją anonimową. Jej definicja jest następująca:
```php ```php
/** /**
@@ -289,7 +290,7 @@ Wbudowany walidator jest zdefiniowaną w modelu metodą lub funkcją anonimową.
function ($attribute, $params) function ($attribute, $params)
``` ```
Jeśli atrybut nie przejdzie walidacji, metoda/funkcja powinna wywołać metodę [[yii\base\Model::addError()]] do zapisania wiadomości błędu w modelu, Jeśli atrybut nie przejdzie walidacji, metoda/funkcja powinna wywołać metodę [[yii\base\Model::addError()|addError()]] do zapisania wiadomości błędu w modelu,
aby mogła ona zostać później pobrana i zaprezentowana użytkownikowi. aby mogła ona zostać później pobrana i zaprezentowana użytkownikowi.
Poniżej znajduje się kilka przykładów: Poniżej znajduje się kilka przykładów:
@@ -311,7 +312,7 @@ class MyForm extends Model
// Wbudowany walidator zdefiniowany jako funkcja anonimowa // Wbudowany walidator zdefiniowany jako funkcja anonimowa
['token', function ($attribute, $params) { ['token', function ($attribute, $params) {
if (!ctype_alnum($this->$attribute)) { if (!ctype_alnum($this->$attribute)) {
$this->addError($attribute, 'Żeton musi zawierać litery lub cyfry.'); $this->addError($attribute, 'Token musi zawierać litery lub cyfry.');
} }
}], }],
]; ];
@@ -326,10 +327,9 @@ class MyForm extends Model
} }
``` ```
> Note: Domyślnie, wbudowane walidatory nie zostaną zastosowane jeśli ich powiązane atrybuty otrzymają puste wartości lub wcześniej nie przeszły którejś z zasad walidacji. > Note: Domyślnie wbudowane walidatory nie zostaną zastosowane, jeśli ich powiązane atrybuty otrzymają puste wartości lub wcześniej nie przeszły którejś z zasad walidacji.
Jeśli chcesz się upewnić, że zasada zawsze zostanie zastosowana, > Jeśli chcesz się upewnić, że zasada zawsze zostanie zastosowana, możesz skonfigurować właściwość [[yii\validators\Validator::skipOnEmpty|skipOnEmpty]] i/lub
możesz skonfigurować właściwość [[yii\validators\Validator::skipOnEmpty|skipOnEmpty]] i/lub [[yii\validators\Validator::skipOnError|skipOnError]] > [[yii\validators\Validator::skipOnError|skipOnError]] przypisując jej wartość `false` w deklaracji zasady walidacji. Dla przykładu:
przypisując jej wartość `false` w deklaracji zasady walidacji. Dla przykładu:
> >
> ```php > ```php
> [ > [
@@ -340,12 +340,13 @@ przypisując jej wartość `false` w deklaracji zasady walidacji. Dla przykładu
### Walidatory niezależne <span id="standalone-validators"></span> ### Walidatory niezależne <span id="standalone-validators"></span>
Walidator niezależy jest klasą rozszerzającą [[yii\validators\Validator]] lub klasy dziedziczące po [[yii\validators\Validator]]. Walidator niezależy jest klasą rozszerzającą [[yii\validators\Validator|Validator]] lub klasy po nim dziedziczące.
Możesz zaimplementować jego logikę walidacji przez nadpisanie metody [[yii\validators\Validator::validateAttribute()]]. Możesz zaimplementować jego logikę walidacji przez nadpisanie metody [[yii\validators\Validator::validateAttribute()|validateAttribute()]].
Jeśli atrybut nie przejdzie walidacji, wywołaj metodę [[yii\base\Model::addError()]] do zapisania wiadomości błędu w modelu, tak jak w [walidatorach wbudowanych](#inline-validators). Jeśli atrybut nie przejdzie walidacji, wywołaj metodę [[yii\base\Model::addError()|addError()]] do zapisania wiadomości błędu w modelu, tak jak w
[walidatorach wbudowanych](#inline-validators).
Dla przykładu, wbudowany walidator z powyższego przykładu mógłby zostać przeniesiony do nowej klasy [[components/validators/CountryValidator]]. Dla przykładu, poprzedni wbudowany walidator mógłby zostać przeniesiony do nowej klasy `components/validators/CountryValidator`.
```php ```php
namespace app\components; namespace app\components;
@@ -363,9 +364,9 @@ class CountryValidator extends Validator
} }
``` ```
Jeśli chcesz, aby walidator wspierał walidację wartości bez modelu, powinieneś nadpisać metodę [[yii\validators\Validator::validate()]]. Jeśli chcesz, aby walidator wspierał walidację wartości bez modelu, powinieneś nadpisać metodę [[yii\validators\Validator::validate()|validate()]].
Możesz nadpisać także [[yii\validators\Validator::validateValue()]] zamiast `validateAttribute()` oraz `validate()`, Możesz nadpisać także [[yii\validators\Validator::validateValue()|validateValue()]] zamiast `validateAttribute()` oraz `validate()`,
ponieważ domyślnie te dwie metody są implementowane przez użycie metody `validateValue()`. ponieważ domyślnie te dwie metody są implementowane użyciem metody `validateValue()`.
Poniżej znajduje się przykład, jak mógłbyś użyć powyższej klasy walidatora w swoim modelu. Poniżej znajduje się przykład, jak mógłbyś użyć powyższej klasy walidatora w swoim modelu.
@@ -396,20 +397,20 @@ class EntryForm extends Model
## Walidacja po stronie klienta <span id="client-side-validation"></span> ## Walidacja po stronie klienta <span id="client-side-validation"></span>
Walidacja po stronie klienta bazowana na kodzie JavaScript jest wskazana kiedy użytkownicy dostarczają dane przez formularz HTML, Walidacja po stronie klienta bazująca na kodzie JavaScript jest wskazana, kiedy użytkownicy dostarczają dane przez formularz HTML,
ponieważ pozwala na szybszą walidację błędów, a tym samym zapewnia lepsze doświadczenia dla użytkownika. Możesz użyć lub zaimplementować ponieważ pozwala na szybszą walidację błędów, a tym samym zapewnia lepszą ich obsługę dla użytkownika. Możesz użyć lub zaimplementować walidator, który wspiera walidację po stronie
walidator który wspiera walidację po stronie klienta *dodatkowo do* walidacji po stronie serwera. klienta *dodatkowo do* walidacji po stronie serwera.
> Info: Walidacja po stronie klienta nie jest wymaganą rzeczą. Głównym jej celem jest poprawa jakości korzystania z formularzy przez użytkowników. > Info: Walidacja po stronie klienta nie jest wymagana. Głównym jej celem jest poprawa jakości korzystania z formularzy przez użytkowników.
Podobnie do danych wejściowych pochodzących od użytkowników, nigdy nie powinieneś ufać walidacji po stronie klienta. Z tego powodu, Podobnie do danych wejściowych pochodzących od użytkowników, nigdy nie powinieneś ufać walidacji po stronie klienta. Z tego powodu,
powinieneś zawsze przeprowadzać walidację po stronie serwera wywołując metodę [[yii\base\Model::validate()]], tak jak zostało to opisane w poprzednich sekcjach. powinieneś zawsze przeprowadzać walidację po stronie serwera wywołując metodę [[yii\base\Model::validate()|validate()]], tak jak zostało to opisane w poprzednich sekcjach.
### Używanie walidacji po stronie klienta <span id="using-client-side-validation"></span> ### Używanie walidacji po stronie klienta <span id="using-client-side-validation"></span>
Wiele [podstawowych walidatorów](tutorial-core-validators.md) domyślnie wspiera walidację po stronie klienta. Wszystko co musisz zrobić, Wiele [podstawowych walidatorów](tutorial-core-validators.md) domyślnie wspiera walidację po stronie klienta. Wszystko, co musisz zrobić, to użyć widżetu
to użyć widżetu [[yii\widgets\ActiveForm]] do zbudowania formularza HTML. Dla przykładu, model `LoginForm` poniżej deklaruje dwie zasady: [[yii\widgets\ActiveForm|ActiveForm]] do zbudowania formularza HTML. Dla przykładu, model `LoginForm` poniżej deklaruje dwie zasady: jedną, używającą podstawowego walidatora
jedna używa podstawowego walidatora [required](tutorial-core-validators.md#required), który wspiera walidację po stronie klienta i serwera, oraz druga, w której użyto [required](tutorial-core-validators.md#required), który wspiera walidację po stronie klienta i serwera, oraz drugą, w której użyto walidatora wbudowanego `validatePassword`, który
walidatora wbudowanego `validatePassword`, który wspiera tylko walidację po stronie klienta. wspiera tylko walidację po stronie klienta.
```php ```php
namespace app\models; namespace app\models;
@@ -445,8 +446,7 @@ class LoginForm extends Model
``` ```
Formularz HTML zbudowany przez następujący kod zawiera dwa pola: `username` oraz `password`. Formularz HTML zbudowany przez następujący kod zawiera dwa pola: `username` oraz `password`.
Jeśli wyślesz formularz bez wpisywania jakichkolwiek danych, otrzymasz komunikaty błędów o braku wpisanych danych, Jeśli wyślesz formularz bez wpisywania jakichkolwiek danych, otrzymasz komunikaty błędów o ich braku, bez konieczności przeprowadzania komunikacji z serwerem.
bez żadnej komunikacji z serwerem.
```php ```php
<?php $form = yii\widgets\ActiveForm::begin(); ?> <?php $form = yii\widgets\ActiveForm::begin(); ?>
@@ -456,18 +456,19 @@ bez żadnej komunikacji z serwerem.
<?php yii\widgets\ActiveForm::end(); ?> <?php yii\widgets\ActiveForm::end(); ?>
``` ```
"Za kulisami", widżet [[yii\widgets\ActiveForm]] odczyta wszystkie zasady walidacji zadeklarowane w modelu i wygeneruje odpowiedni kod JavaScript "Za kulisami", widżet [[yii\widgets\ActiveForm|ActiveForm]] odczyta wszystkie zasady walidacji zadeklarowane w modelu i wygeneruje odpowiedni kod JavaScript
dla walidatorów wspierających walidację po stronie klienta. Kiedy użytkownik zmieni wartość w polu lub spróbuje wysłać formularz, zostanie wywołana walidacja po stronie klienta. dla walidatorów wspierających walidację po stronie klienta. Kiedy użytkownik zmieni wartość w polu lub spróbuje wysłać formularz, zostanie wywołana walidacja po stronie klienta.
Jeśli chcesz wyłączyć kompletnie walidację po stronie klienta, możesz ustawić właściwość [[yii\widgets\ActiveForm::enableClientValidation]] na `false`. Jeśli chcesz wyłączyć kompletnie walidację po stronie klienta, możesz ustawić właściwość [[yii\widgets\ActiveForm::enableClientValidation|enableClientValidation]] na `false`.
Możesz również wyłączyć ten rodzaj walidacji dla konkretnego pola, przez ustawienie jego właściwości [[yii\widgets\ActiveField::enableClientValidation]] na `false`. Możesz również wyłączyć ten rodzaj walidacji dla konkretnego pola, przez ustawienie jego właściwości
Jeśli właściwość `enableClientValidation` zostanie skonfigurowana na poziomie pola formularza i w samym formularzu na raz, pierwszeństwo będzie miała opcja określona w formularzu. [[yii\widgets\ActiveField::enableClientValidation|enableClientValidation]] na `false`. Jeśli właściwość `enableClientValidation` zostanie skonfigurowana na poziomie pola formularza i w
samym formularzu jednocześnie, pierwszeństwo będzie miała opcja określona w formularzu.
### Implementacja walidacji po stronie klienta <span id="implementing-client-side-validation"></span> ### Implementacja walidacji po stronie klienta <span id="implementing-client-side-validation"></span>
Aby utworzyć walidator wspierający walidację po stronie klienta, powinieneś zaimplementować metodę [[yii\validators\Validator::clientValidateAttribute()]], Aby utworzyć walidator wspierający walidację po stronie klienta, powinieneś zaimplementować metodę [[yii\validators\Validator::clientValidateAttribute()|clientValidateAttribute()]],
która zwraca kawałek kodu JavaScript, odpowiedzialny za przeprowadzenie walidacji. W kodzie JavaScript możesz użyć następujących predefiniowanych zmiennych: która zwraca kod JavaScript, odpowiedzialny za przeprowadzenie walidacji. W kodzie JavaScript możesz użyć następujących predefiniowanych zmiennych:
- `attribute`: nazwa atrybutu podlegającego walidacji. - `attribute`: nazwa atrybutu podlegającego walidacji.
- `value`: wartość atrybutu podlegająca walidacji. - `value`: wartość atrybutu podlegająca walidacji.
@@ -504,7 +505,7 @@ class StatusValidator extends Validator
$statuses = json_encode(Status::find()->select('id')->asArray()->column()); $statuses = json_encode(Status::find()->select('id')->asArray()->column());
$message = json_encode($this->message, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); $message = json_encode($this->message, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
return <<<JS return <<<JS
if ($.inArray(value, $statuses) > -1) { if ($.inArray(value, $statuses) === -1) {
messages.push($message); messages.push($message);
} }
JS; JS;
@@ -513,7 +514,7 @@ JS;
``` ```
> Tip: Powyższy kod został podany głównie do zademonstrowania jak wspierać walidację po stronie klienta. > Tip: Powyższy kod został podany głównie do zademonstrowania jak wspierać walidację po stronie klienta.
> W praktyce można użyć podstawowego walidatora [in](tutorial-core-validators.md#in) aby osiągnąć ten sam cel. > W praktyce można użyć podstawowego walidatora [in](tutorial-core-validators.md#in), aby osiągnąć ten sam cel.
> Możesz napisać taką zasadę walidacji następująco: > Możesz napisać taką zasadę walidacji następująco:
> >
> ```php > ```php
@@ -544,7 +545,7 @@ W powyższym kodzie, zmienna `deferred` jest dostarczona przez Yii, która jest
Metoda jQuery `$.get()` tworzy obiekt kolejkowy, który jest dodawany do tablicy `deferred`. Metoda jQuery `$.get()` tworzy obiekt kolejkowy, który jest dodawany do tablicy `deferred`.
Możesz także utworzyć osobny obiekt kolejkowania i wywołać jego metodę `resolve()` po otrzymaniu asynchronicznej informacji zwrotnej. Możesz także utworzyć osobny obiekt kolejkowania i wywołać jego metodę `resolve()` po otrzymaniu asynchronicznej informacji zwrotnej.
Poniższy przykład pokazuje jak zwalidować wymiary przesłanego obrazka po stronie klienta. Poniższy przykład pokazuje, jak zwalidować wymiary przesłanego obrazka po stronie klienta.
```php ```php
public function clientValidateAttribute($model, $attribute, $view) public function clientValidateAttribute($model, $attribute, $view)
@@ -600,10 +601,11 @@ JS;
### Walidacja przy użyciu AJAX <span id="ajax-validation"></span> ### Walidacja przy użyciu AJAX <span id="ajax-validation"></span>
Niektóre walidacje mogą zostać wykonane tylko po stronie serwera, ponieważ tylko serwer posiada niezbędne informacje do ich przeprowadzenia. Niektóre walidacje mogą zostać wykonane tylko po stronie serwera, ponieważ tylko serwer posiada niezbędne informacje do ich przeprowadzenia.
Dla przykładu, aby sprawdzić, czy login został już zajęty, musimy sprawdzić tabelę użytkowników na serwerze. Dla przykładu, aby sprawdzić, czy login został już zajęty, musimy sprawdzić tabelę użytkowników w bazie danych.
W tym właśnie przypadku możesz użyć walidacji AJAX. Wywoła ona żądanie AJAX w tle, aby spradzić to pole. W tym właśnie przypadku możesz użyć walidacji AJAX. Wywoła ona żądanie AJAX w tle, aby spradzić to pole.
Aby uaktywnić walidację AJAX dla pojedyńczego pola formularza, ustaw właściwość [[yii\widgets\ActiveField::enableAjaxValidation|enableAjaxValidation]] na `true` oraz określ unikalne ID formularza: Aby uaktywnić walidację AJAX dla pojedyńczego pola formularza, ustaw właściwość [[yii\widgets\ActiveField::enableAjaxValidation|enableAjaxValidation]] na `true` oraz określ unikalne ID
formularza:
```php ```php
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
@@ -628,12 +630,11 @@ $form = ActiveForm::begin([
]); ]);
``` ```
> Note: Jeśli właściwość `enableAjaxValidation` zostanie skonfigurowana na poziomie pola formularza i w samym formularzu na raz, > Note: Jeśli właściwość [[yii\widgets\ActiveForm::enableAjaxValidation|enableAjaxValidation]] zostanie skonfigurowana na poziomie pola formularza i jednocześnie w samym formularzu,
pierwszeństwo będzie miała opcja określona w formularzu. pierwszeństwo będzie miała opcja określona w formularzu.
Musisz również przygotować serwer aby mógł obsłużyć AJAX'owe zapytanie o walidację. Musisz również przygotować serwer, aby mógł obsłużyć AJAXowe zapytanie o walidację. Możesz to osiągnąć przez następujący skrawek kodu w akcji kontrolera:
Możesz to osiągnąć przez następujący skrawek kodu w akcji kontrolera:
```php ```php
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) { if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
@@ -642,7 +643,7 @@ if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
} }
``` ```
Powyższy kod sprawdzi, czy zapytanie zostało przy użyciu AJAX'a. Jeśli tak, w odpowiedzi zwróci wynik walidacji w formacie JSON. Powyższy kod sprawdzi, czy zapytanie zostało wysłane przy użyciu AJAXa. Jeśli tak, w odpowiedzi zwróci wynik walidacji w formacie JSON.
> Info: Możesz również użyć [walidacji kolejkowej](#deferred-validation) do wykonania walidacji AJAX, > 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
jednakże walidacja AJAX'owa opisana w tej sekcji jest bardziej systematyczna i wymaga mniej wysiłku przy kodowaniu. wymaga mniej wysiłku przy kodowaniu.

View File

@@ -5,7 +5,7 @@ Praca ze skryptami
### Rejestrowanie skryptów ### Rejestrowanie skryptów
Dzięki obiektowi [[yii\web\View]] możesz rejestrować skrypty w aplikacji. Przeznaczone są do tego dwie dedykowane metody: Dzięki obiektowi [[yii\web\View|View]] możesz rejestrować skrypty w aplikacji. Przeznaczone są do tego dwie dedykowane metody:
[[yii\web\View::registerJs()|registerJs()]] dla skryptów wbudowanych oraz [[yii\web\View::registerJs()|registerJs()]] dla skryptów wbudowanych oraz
[[yii\web\View::registerJsFile()|registerJsFile()]] dla skryptów zewnętrznych. [[yii\web\View::registerJsFile()|registerJsFile()]] dla skryptów zewnętrznych.
Skrypty wbudowane są przydatne przy konfiguracji oraz dynamicznym generowaniu kodu. Skrypty wbudowane są przydatne przy konfiguracji oraz dynamicznym generowaniu kodu.
@@ -15,7 +15,7 @@ Możesz dodać je w następujący sposób:
$this->registerJs("var options = " . json_encode($options) . ";", View::POS_END, 'my-options'); $this->registerJs("var options = " . json_encode($options) . ";", View::POS_END, 'my-options');
``` ```
Pierwszy argument przekazywany do metody `registerJs` to kod JavaScript, który chcemy umieścić na stronie. Jako drugi argument, wskazujemy miejsce, Pierwszy argument przekazywany do metody `registerJs` to kod JavaScript, który chcemy umieścić na stronie. Jako drugi argument wskazujemy miejsce,
w którym skrypt ma zostać umieszczony na stronie. Możliwe wartości to: w którym skrypt ma zostać umieszczony na stronie. Możliwe wartości to:
- [[yii\web\View::POS_HEAD|View::POS_HEAD]] dla sekcji `head`. - [[yii\web\View::POS_HEAD|View::POS_HEAD]] dla sekcji `head`.
@@ -24,7 +24,7 @@ w którym skrypt ma zostać umieszczony na stronie. Możliwe wartości to:
- [[yii\web\View::POS_READY|View::POS_READY]] do wywołania kodu z użyciem zdarzenia `ready` na dokumencie. Ta opcja zarejestruje automatycznie [[yii\web\JqueryAsset|jQuery]] - [[yii\web\View::POS_READY|View::POS_READY]] do wywołania kodu z użyciem zdarzenia `ready` na dokumencie. Ta opcja zarejestruje automatycznie [[yii\web\JqueryAsset|jQuery]]
- [[yii\web\View::POS_LOAD|View::POS_LOAD]] do wywołania kodu z użyciem zdarzenia `load` na dokumencie. Ta opcja zarejestruje automatycznie [[yii\web\JqueryAsset|jQuery]] - [[yii\web\View::POS_LOAD|View::POS_LOAD]] do wywołania kodu z użyciem zdarzenia `load` na dokumencie. Ta opcja zarejestruje automatycznie [[yii\web\JqueryAsset|jQuery]]
Ostatnim argumentem jest unikalne ID skryptu, które jest używane do zidentyfikowania bloku kodu i zastąpienia go jeśli taki został już zarejestrowany. Ostatnim argumentem jest unikalne ID skryptu, które jest używane do zidentyfikowania bloku kodu i zastąpienia go, jeśli taki został już zarejestrowany.
Jeśli ten argument nie zostanie podany, kod JavaScript zostanie użyty jako ID. Jeśli ten argument nie zostanie podany, kod JavaScript zostanie użyty jako ID.
Skrypt zewnętrzny może zostać dodany następująco: Skrypt zewnętrzny może zostać dodany następująco:
@@ -37,13 +37,14 @@ Argumenty dla metod [[yii\web\View::registerCssFile()|registerCssFile()]] są po
W powyższym przykładzie, zarejestrowaliśmy plik `main.js` z zależnością od `JqueryAsset`. Oznacza to, że plik `main.js` zostanie dodany PO pliku `jquery.js`. W powyższym przykładzie, zarejestrowaliśmy plik `main.js` z zależnością od `JqueryAsset`. Oznacza to, że plik `main.js` zostanie dodany PO pliku `jquery.js`.
Bez określenia tej zależności, względny porządek pomiędzy `main.js` a `jquery.js` nie zostałby zachowany. Bez określenia tej zależności, względny porządek pomiędzy `main.js` a `jquery.js` nie zostałby zachowany.
Tak jak dla [[yii\web\View::registerCssFile()|registerCssFile()]], mocno rekomendujemy, abyś użył [assetów](structure-assets.md) do zarejestrowania zewnętrznych plików JS niż używał [[yii\web\View::registerJsFile()|registerJsFile()]]. Tak jak i w przypadku [[yii\web\View::registerCssFile()|registerCssFile()]], mocno rekomendujemy, abyś użył [assetów](structure-assets.md) do zarejestrowania zewnętrznych plików JS
zamiast używania [[yii\web\View::registerJsFile()|registerJsFile()]].
### Rejestracja assetów ### Rejestracja assetów
Tak jak zostało wspomniane wcześniej, korzystniejsze jest stosowanie assetów, a nie bezpośrednio kodu CSS i JS. Jak zostało wspomniane wcześniej, korzystniejsze jest stosowanie assetów, zamiast kodu CSS i JS bezpośrednio (po informacje na ten temat sięgnij do sekcji
Możesz uzyskać więcej szczegółów, jak definiować pakiety assetów w sekcji [menedżera assetów](structure-assets.md). [menedżera assetów](structure-assets.md)).
Korzystanie z już zdefiniowanych pakietów jest bardzo proste: Korzystanie z już zdefiniowanych pakietów jest bardzo proste:
```php ```php
@@ -51,17 +52,16 @@ Korzystanie z już zdefiniowanych pakietów jest bardzo proste:
``` ```
### Rejestrowanie kodu CSS ### Rejestrowanie kodu CSS
Możesz zarejestrować kod CSS przy użyciu metody [[yii\web\View::registerCss()|registerCss()]] lub [[yii\web\View::registerCssFile()|registerCssFile()]]. Możesz zarejestrować kod CSS przy użyciu metody [[yii\web\View::registerCss()|registerCss()]] lub [[yii\web\View::registerCssFile()|registerCssFile()]].
Pierwsza z nich rejestruje blok kodu CSS, natomiast druga zewnętrzny plik .css. Dla przykładu: Pierwsza z nich rejestruje blok kodu CSS, natomiast druga zewnętrzny plik `.css`. Dla przykładu:
```php ```php
$this->registerCss("body { background: #f00; }"); $this->registerCss("body { background: #f00; }");
``` ```
Powyższy kod będzie skutkował dodaniem kodu CSS do sekcji `head` strony: Powyższy kod doda kod CSS do sekcji `head` strony:
```html ```html
<style> <style>
@@ -69,8 +69,8 @@ body { background: #f00; }
</style> </style>
``` ```
Jeśli chcesz określić dodatkowe właściwości dla tagu `style`, przekaż tablicę nazwa=>wartość jako drugi argument. Jeśli chcesz określić dodatkowe właściwości dla tagu `style`, przekaż tablicę `nazwa => wartość` jako drugi argument.
Jeśli chcesz się upewnić, że jest tylko jeden tag `style`, użyj trzeciego argumentu, tak jak zostało to opisane w opisie meta tagów. Jeśli chcesz się upewnić, że jest tylko jeden tag `style`, użyj trzeciego argumentu, tak jak zostało to opisane dla meta tagów.
```php ```php
$this->registerCssFile("http://example.com/css/themes/black-and-white.css", [ $this->registerCssFile("http://example.com/css/themes/black-and-white.css", [
@@ -81,10 +81,10 @@ $this->registerCssFile("http://example.com/css/themes/black-and-white.css", [
Kod powyżej doda link w sekcji `head` strony do pliku CSS. Kod powyżej doda link w sekcji `head` strony do pliku CSS.
* Pierwszy argument określa, który plik ma zostać zarejestrowany * Pierwszy argument określa, który plik ma zostać zarejestrowany,
* Drugi argument określa atrybuty tagu `<link>`. Opcja `depends` jest obsługiwana w specjalny sposób, zależne od niej jest położenie pliku CSS. * Drugi argument określa atrybuty tagu `<link>`. Opcja `depends` jest obsługiwana w specjalny sposób, od niej zależy położenie pliku CSS.
W tym przypadku, plik link do pliku CSS zostanie umieszony ZA plikami CSS w [[yii\bootstrap\BootstrapAsset|BootstrapAsset]]. W tym przypadku, plik link do pliku CSS zostanie umieszony ZA plikami CSS w [[yii\bootstrap\BootstrapAsset|BootstrapAsset]],
* Ostatni argument określa ID identyfikujące ten plik CSS. Jeśli nie zostanie podane, zostanie użyty do tego celu adres URL pliku CSS. * Ostatni argument określa ID identyfikujące ten plik CSS. W przypadku jego braku, zostanie użyty do tego celu adres URL pliku CSS.
Jest mocno wskazane używanie [assetów](structure-assets.md) do rejestrowania zewnętrznych plików CSS. Użycie ich pozwala Ci na łączenie i kompresowanie Jest mocno wskazane używanie [assetów](structure-assets.md) do rejestrowania zewnętrznych plików CSS. Użycie ich pozwala Ci na łączenie i kompresowanie
wielu plików CSS, które jest wręcz niezbędne na stronach internetowych o dużym ruchu. wielu plików CSS, które jest wręcz niezbędne na stronach internetowych o dużym natężeniu ruchu.

View File

@@ -4,7 +4,7 @@ Obsługa błędów
Podczas obsługi żądania RESTfulowego API, w przypadku wystąpienia błędu w zapytaniu użytkownika lub gdy stanie się coś nieprzewidywanego Podczas obsługi żądania RESTfulowego API, w przypadku wystąpienia błędu w zapytaniu użytkownika lub gdy stanie się coś nieprzewidywanego
z serwerem, możesz po prostu rzucić wyjątkiem, aby powiadomić użytkownika, że coś poszło nieprawidłowo. z serwerem, możesz po prostu rzucić wyjątkiem, aby powiadomić użytkownika, że coś poszło nieprawidłowo.
Jeśli możesz zidentyfikować przyczynę błędu (np. żądany zasób nie istnieje), powinieneś rozważyć Jeśli możesz zidentyfikować przyczynę błędu (np. żądany zasób nie istnieje), powinieneś rozważyć
rzucenie wyjątkiem razem z odpowiednim kodem statusu HTTP (np. [[yii\web\NotFoundHttpException]] odpowiada statusowi o kodzie 404). rzucenie wyjątkiem razem z odpowiednim kodem statusu HTTP (np. [[yii\web\NotFoundHttpException|NotFoundHttpException]] odpowiada statusowi o kodzie 404).
Yii wyśle odpowiedź razem z odpowiadającym jej kodem i treścią statusu HTTP. Yii dołączy również do samej odpowiedzi zserializowaną reprezentację Yii wyśle odpowiedź razem z odpowiadającym jej kodem i treścią statusu HTTP. Yii dołączy również do samej odpowiedzi zserializowaną reprezentację
wyjątku. Przykładowo: wyjątku. Przykładowo:

View File

@@ -19,7 +19,7 @@ Skrypty wejściowe wykonują głównie następującą pracę:
* Dołączają plik klasy [[Yii]], * Dołączają plik klasy [[Yii]],
* Ładują konfigurację aplikacji, * Ładują konfigurację aplikacji,
* Tworzą i konfigurują instancję [aplikacji](structure-applications.md), * Tworzą i konfigurują instancję [aplikacji](structure-applications.md),
* Wywołują [[yii\base\Application::run()]], aby przetworzyć wysłane żądanie. * Wywołują [[yii\base\Application::run()|run()]], aby przetworzyć wysłane żądanie.
## Aplikacje Web <span id="web-applications"></span> ## Aplikacje Web <span id="web-applications"></span>
@@ -106,5 +106,4 @@ if (!defined('YII_DEBUG')) {
Jak widać pierwszy sposób jest bardziej zwięzły i łatwiejszy do zrozumienia. Jak widać pierwszy sposób jest bardziej zwięzły i łatwiejszy do zrozumienia.
Definiowanie stałych powinno odbyć się na samym początku skryptu wejściowego, aby odniosło skutek podczas dołączania pozostałych Definiowanie stałych powinno odbyć się na samym początku skryptu wejściowego, aby odniosło skutek podczas dołączania pozostałych plików PHP.
plików PHP.