guide [PL] intro

Polish translation for intro-upgrade-from-v1 and intro-yii.
Few annotations for README as well.
This commit is contained in:
Bizley
2015-07-07 20:33:20 +02:00
parent c017c8f388
commit 586ddcf7c1
3 changed files with 579 additions and 51 deletions

View File

@ -1,5 +1,5 @@
Przewodnik po Yii 2.0 Przewodnik po Yii 2.0
=============================== =====================
Ten poradnik udostępniony jest na [Warunkach dokumentacji Yii](http://www.yiiframework.com/doc/terms/). Ten poradnik udostępniony jest na [Warunkach dokumentacji Yii](http://www.yiiframework.com/doc/terms/).
@ -9,14 +9,14 @@ Wszelkie prawa zastrzeżone.
Wstęp Wstęp
------------ -----
* [O Yii](intro-yii.md) * [O Yii](intro-yii.md)
* [Aktualizacja z wersji 1.1](intro-upgrade-from-v1.md) * [Aktualizacja z wersji 1.1](intro-upgrade-from-v1.md)
Pierwsze kroki Pierwsze kroki
--------------- --------------
* [Instalacja Yii](start-installation.md) * [Instalacja Yii](start-installation.md)
* [Uruchamianie aplikacji](start-workflow.md) * [Uruchamianie aplikacji](start-workflow.md)
@ -28,7 +28,7 @@ Pierwsze kroki
Struktura aplikacji Struktura aplikacji
--------------------- -------------------
* [Przegląd](structure-overview.md) * [Przegląd](structure-overview.md)
* [Skrypty wejściowe](structure-entry-scripts.md) * [Skrypty wejściowe](structure-entry-scripts.md)
@ -45,7 +45,7 @@ Struktura aplikacji
Obsługa żądań Obsługa żądań
----------------- -------------
* [Przegląd](runtime-overview.md) * [Przegląd](runtime-overview.md)
* [Bootstrapping](runtime-bootstrapping.md) * [Bootstrapping](runtime-bootstrapping.md)
@ -58,7 +58,7 @@ Obsługa żądań
Kluczowe koncepcje Kluczowe koncepcje
------------ ------------------
* [Komponenty](concept-components.md) * [Komponenty](concept-components.md)
* [Właściwości](concept-properties.md) * [Właściwości](concept-properties.md)
@ -72,10 +72,10 @@ Kluczowe koncepcje
Praca z bazami danych Praca z bazami danych
---------------------- ---------------------
* [Obiekt dostępu do danych (DAO)](db-dao.md): Łączenie z bazą, podstawowe zapytania, transakcje i manipulacja schematem. * [Obiekt dostępu do danych (DAO)](db-dao.md): Łączenie z bazą, podstawowe zapytania, transakcje i manipulacja schematem.
* [Budowniczy kwerend](db-query-builder.md): Zapytania do bazy danych z użyciem warstwy abstrakcyjnej. * [Konstruktor kwerend](db-query-builder.md): Zapytania do bazy danych z użyciem warstwy abstrakcyjnej.
* [Rekord aktywny](db-active-record.md): ORM Rekordu aktywnego, otrzymywanie i manipulacja rekordami oraz definiowanie relacji. * [Rekord aktywny](db-active-record.md): ORM Rekordu aktywnego, otrzymywanie i manipulacja rekordami oraz definiowanie relacji.
* [Migracje](db-migrations.md): Użycie systemu kontroli wersji na twoich bazach danych podczas tworzenia aplikacji w grupie. * [Migracje](db-migrations.md): Użycie systemu kontroli wersji na twoich bazach danych podczas tworzenia aplikacji w grupie.
* [Sphinx](db-sphinx.md) * [Sphinx](db-sphinx.md)
@ -85,7 +85,7 @@ Praca z bazami danych
Odbieranie danych od użytkowników Odbieranie danych od użytkowników
----------------------- ---------------------------------
* [Tworzenie formularzy](input-forms.md) * [Tworzenie formularzy](input-forms.md)
* [Walidacja danych wejściowych](input-validation.md) * [Walidacja danych wejściowych](input-validation.md)
@ -95,7 +95,7 @@ Odbieranie danych od użytkowników
Wyświetlanie danych Wyświetlanie danych
--------------- -------------------
* [Formatowanie danych](output-formatting.md) * [Formatowanie danych](output-formatting.md)
* [Stronicowanie](output-pagination.md) * [Stronicowanie](output-pagination.md)
@ -103,11 +103,11 @@ Wyświetlanie danych
* [Dostawcy danych](output-data-providers.md) * [Dostawcy danych](output-data-providers.md)
* [Widżety danych](output-data-widgets.md) * [Widżety danych](output-data-widgets.md)
* [Praca ze skryptami po stronie klienta](output-client-scripts.md) * [Praca ze skryptami po stronie klienta](output-client-scripts.md)
* [Motywy (Theming)](output-theming.md) * [Skórki i motywy (Theming)](output-theming.md)
Bezpieczeństwo Bezpieczeństwo
-------- --------------
* [Uwierzytelnianie](security-authentication.md) * [Uwierzytelnianie](security-authentication.md)
* [Autoryzacja](security-authorization.md) * [Autoryzacja](security-authorization.md)
@ -117,7 +117,7 @@ Bezpieczeństwo
Pamięć podręczna Pamięć podręczna
------- ----------------
* [Przegląd](caching-overview.md) * [Przegląd](caching-overview.md)
* [Pamięć podręczna danych](caching-data.md) * [Pamięć podręczna danych](caching-data.md)
@ -127,7 +127,7 @@ Pamięć podręczna
Webserwisy z wykorzystaniem REST Webserwisy z wykorzystaniem REST
-------------------- --------------------------------
* [Szybki start](rest-quick-start.md) * [Szybki start](rest-quick-start.md)
* [Zasoby](rest-resources.md) * [Zasoby](rest-resources.md)
@ -141,7 +141,7 @@ Webserwisy z wykorzystaniem REST
Narzędzia wspomagające tworzenie aplikacji Narzędzia wspomagające tworzenie aplikacji
----------------- ------------------------------------------
* [Pasek debugowania i debuger](tool-debugger.md) * [Pasek debugowania i debuger](tool-debugger.md)
* [Generowanie kodu przy użyciu Gii](tool-gii.md) * [Generowanie kodu przy użyciu Gii](tool-gii.md)
@ -149,7 +149,7 @@ Narzędzia wspomagające tworzenie aplikacji
Testowanie Testowanie
------- ----------
* [Przegląd](test-overview.md) * [Przegląd](test-overview.md)
* [Ustawienia środowiska testowego](test-endvironment-setup.md) * [Ustawienia środowiska testowego](test-endvironment-setup.md)
@ -160,7 +160,7 @@ Testowanie
Tematy specjalne Tematy specjalne
-------------- ----------------
* [Szablon zaawansowanej aplikacji](tutorial-advanced-app.md) * [Szablon zaawansowanej aplikacji](tutorial-advanced-app.md)
* [Tworzenie aplikacji od podstaw](tutorial-start-from-scratch.md) * [Tworzenie aplikacji od podstaw](tutorial-start-from-scratch.md)
@ -169,7 +169,7 @@ Tematy specjalne
* [Internacjonalizacja](tutorial-i18n.md) * [Internacjonalizacja](tutorial-i18n.md)
* [Wysyłanie poczty](tutorial-mailing.md) * [Wysyłanie poczty](tutorial-mailing.md)
* [Poprawianie wydajności](tutorial-performance-tuning.md) * [Poprawianie wydajności](tutorial-performance-tuning.md)
* [Shared Hosting Environment](tutorial-shared-hosting.md) * [Współdzielone środowisko hostujące](tutorial-shared-hosting.md)
* [Silniki szablonów](tutorial-template-engines.md) * [Silniki szablonów](tutorial-template-engines.md)
* [Praca z kodem zewnętrznym](tutorial-yii-integration.md) * [Praca z kodem zewnętrznym](tutorial-yii-integration.md)
@ -190,10 +190,19 @@ Widżety
Klasy pomocnicze Klasy pomocnicze
------- ----------------
* [Przegląd](helper-overview.md) * [Przegląd](helper-overview.md)
* [ArrayHelper](helper-array.md) * [ArrayHelper](helper-array.md)
* [Html](helper-html.md) * [Html](helper-html.md)
* [Url](helper-url.md) * [Url](helper-url.md)
Uwagi do polskiego tłumaczenia przewodnika
------------------------------------------
Niektóre z użytych w tym przewodniku programistycznych nazw zostały celowo spolszczone, w przypadku, gdy
w literaturze popularnej nie występują ich polskie odpowiedniki. Mam nadzieję, że czytelnik wybaczy mi okazjonalne
"settery", "gettery" i "traity", które umieszczam tutaj licząc na powszechne zrozumienie tych terminów w polskiej
społeczności programistycznej. Jednocześnie spolszczenia/tłumaczenia niektórych terminów, jak "Fixtures", odmawiam na razie
całkowicie, licząc na to, że język polski w końcu nadgoni lub wchłonie, w ten, czy inny sposób, techniczne nowości.

View File

@ -0,0 +1,515 @@
Aktualizacja z wersji 1.1
=========================
Pomiędzy wersjami 1.1 i 2.0 Yii jest ogrom różnic, ponieważ framework został całkowicie przepisany w 2.0.
Z tego też powodu aktualizacja z wersji 1.1 nie jest tak trywialnym procesem, jak w przypadku aktualizacji pomiędzy pomniejszymi wersjami.
W tym przewodniku zapoznasz się z największymi różnicami dwóch głównych wersji.
Jeśli nie korzystałeś wcześniej z Yii 1.1, możesz pominąć tę sekcję i przejść bezpośrednio do "[Pierwszych kroków](start-installation.md)".
Zwróć uwagę na to, że Yii 2.0 wprowadza znacznie więcej nowych funkcjonalności, niż wymienionych jest w tym podsumowaniu.
Wskazane jest zapoznanie się z treścią całego przewodnika, aby poznać je wszystkie. Jest bardzo prawdopodobne, że niektóre z mechanizmów, które
poprzednio musiałeś stworzyć samemu, teraz są częścią podstawowego kodu.
Instalacja
----------
Yii 2.0 w pełni korzysta z udogodnień [Composera](https://getcomposer.org/), będącego de facto menadżerem projektów PHP.
Z jego pomocą odbywa się zarówno instalacja podstawowego frameworka, jak i wszystkich rozszerzeń. Aby zapoznać się ze szczegółową
instrukcją instalacji Yii 2.0, przejdź do sekcji [Instalacja Yii](start-installation.md). Jeśli chcesz stworzyć nowe rozszerzenie
lub zmodyfikować istniejące w wersji 1.1, aby było kompatybilne z 2.0, przejdź do sekcji [Tworzenie rozszerzeń](structure-extensions.md#creating-extensions).
Wymagania PHP
-------------
Yii 2.0 wymaga PHP w wersji 5.4 lub nowszej, która została znacząco ulepszona w stosunku do wersji 5.2 (wymaganej przez Yii 1.1).
Z tego też powodu już na poziomie samego języka pojawiło się sporo różnic, na które należy zwrócić uwagę.
Poniżej znajdziesz krótkie podsumowanie głównych różnic dotyczących PHP:
- [Przestrzenie nazw](http://php.net/manual/pl/language.namespaces.php).
- [Funkcje anonimowe](http://php.net/manual/pl/functions.anonymous.php).
- Skrócona składnia zapisu tablic `[...elementy...]` używana zamiast `array(...elementy...)`.
- Krótkie tagi echo `<?=` używane w plikach widoków. Można ich używać bezpiecznie, począwszy od PHP 5.4.
- [Klasy i interfejsy SPL](http://php.net/manual/pl/book.spl.php).
- [Opóźnione statyczne wiązania](http://php.net/manual/pl/language.oop5.late-static-bindings.php).
- [Data i czas](http://php.net/manual/pl/book.datetime.php).
- [Traity](http://php.net/manual/pl/language.oop5.traits.php).
- [Rozszerzenie intl](http://php.net/manual/pl/book.intl.php). Yii 2.0 korzysta z rozszerzenia PHP `intl` do wsparcia obsługi internacjonalizacji.
Przestrzeń nazw
---------------
Najbardziej oczywista zmiana w Yii 2.0 dotyczy używania przestrzeni nazw. Praktycznie każda z podstawowych klas je wykorzystuje, np. `yii\web\Request`.
Prefiks "C" nie jest już używany w nazwach, a sam schemat nazewnictwa odpowiada teraz strukturze folderów - dla przykładu `yii\web\Request` wskazuje,
że plik klasy to `web/Request.php` znajdujący się w folderze frameworka Yii.
Dzięki mechanizmowi ładowania klas Yii możesz użyć dowolnej podstawowej klasy frameworka bez konieczności bezpośredniego dołączania jej kodu.
Komponent i obiekt
------------------
Yii 2.0 rozdzielił klasę `CComponent` z 1.1 na dwie: [[yii\base\Object]] i [[yii\base\Component]].
Lekka klasa [[yii\base\Object|Object]] pozwala na zdefiniowanie [właściwości obiektu](concept-properties.md) poprzez gettery i settery.
Klasa [[yii\base\Component|Component]] dziedziczy po [[yii\base\Object|Object]] i dodatkowo wspiera obsługę [zdarzeń](concept-events.md) oraz [zachowań](concept-behaviors.md).
Jeśli Twoja klasa nie wymaga ww. wsparcia, rozważ użycie [[yii\base\Object|Object]] jako klasy podstawowej. Tak jest zazwyczaj w przypadku klas reprezentujących
najbardziej podstawową strukturę danych.
Konfiguracja obiektu
--------------------
Klasa [[yii\base\Object|Object]] wprowadza ujednoliconą formę konfigurowania obiektów. Każda klasa dziedzicząca po [[yii\base\Object|Object]] powinna zadeklarować swój
konstruktor (jeśli tego wymaga) w następujący sposób, dzięki czemu zostanie poprawnie skonfigurowana:
```php
class MyClass extends \yii\base\Object
{
public function __construct($param1, $param2, $config = [])
{
// ... inicjalizacja przed skonfigurowaniem
parent::__construct($config);
}
public function init()
{
parent::init();
// ... inicjalizacja po skonfigurowaniu
}
}
```
W powyższym przykładzie ostatnim parametrem konstruktora musi być tablica konfiguracyjna,
zawierająca pary nazwa-wartość służące do zainicjowania właściwości na końcu konstruktora.
Możesz nadpisać metodę [[yii\base\Object::init()|init()]], aby wykonać dodatkowy proces inicjalizacyjny po
zaaplikowaniu konfiguracji.
Dzięki tej konwencji możesz tworzyć i konfigurować nowe obiekty, używając
tablicy konfiguracyjnej:
```php
$object = Yii::createObject([
'class' => 'MyClass',
'property1' => 'abc',
'property2' => 'cde',
], [$param1, $param2]);
```
Więcej szczegółów na temat konfiguracji znajdziesz w sekcji [Konfiguracje](concept-configurations.md).
Zdarzenia (Events)
------------------
W Yii 1 zdarzenia były tworzone poprzez definiowanie `on`-metody (np., `onBeforeSave`). W Yii 2 możesz użyć dowolnej nazwy. Uruchomienie zdarzenia następuje
poprzez wywołanie metody [[yii\base\Component::trigger()|trigger()]]:
```php
$event = new \yii\base\Event;
$component->trigger($eventName, $event);
```
Aby dołączyć uchwyt do zdarzenia, użyj metody [[yii\base\Component::on()|on()]]:
```php
$component->on($eventName, $handler);
// a aby odłączyć uchwyt użyj:
// $component->off($eventName, $handler);
```
Zdarzenia zostały wzbogacone w wiele udoskonaleń. Więcej szczegółów na ten temat znajdziesz w sekcji [Zdarzenia (Events)](concept-events.md).
Aliasy ścieżek
--------------
Yii 2.0 rozszerza funkcjonalność aliasów ścieżek zarówno na ścieżki plików oraz folderów, jak i adresy URL. Yii 2.0 wymaga teraz też,
aby nazwa aliasu zaczynała się znakiem `@` w celu odróżnienia jej od zwyczajnych ścieżek plików/folderów lub URLi.
Dla przykładu: alias `@yii` odnosi się do folderu instalacji Yii. Aliasy ścieżek są wykorzystywane w większości miejsc w podstawowym
kodzie Yii, choćby [[yii\caching\FileCache::cachePath]] - można tu przekazać zarówno zwykłą ścieżkę, jak i alias.
Alias ścieżki jest mocno powiązany z przestrzenią nazw klasy. Zalecane jest, aby zdefiniować alias dla każdej podstawowej
przestrzeni nazw, dzięki czemu mechanizm automatycznego ładowania klas Yii nie będzie wymagał dodatkowej konfiguracji.
Dla przykładu: dzięki temu, że `@yii` odwołuje się do folderu instalacji Yii, klasa taka jak `yii\web\Request` może być automatycznie załadowana.
Jeśli używasz zewnętrznych bibliotek, jak np. Zend Framework, możesz zdefiniować alias `@Zend` odnoszący się do folderu instalacji tego frameworka.
Od tej pory Yii będzie również w stanie automatycznie załadować każdą klasę z tej biblioteki.
Więcej o aliasach ścieżek dostępne jest w sekcji [Aliasy](concept-aliases.md).
Widoki
------
Najbardziej znaczącą zmianą dotyczącą widoków w Yii 2 jest użycie specjalnej zmiennej `$this`. W widoku nie odnosi się ona już do
aktualnego kontrolera lub widżetu, lecz do obiektu *widoku*, nowej koncepcji przedstawionej w 2.0. Obiekt *widoku* jest klasą typu [[yii\web\View]], która
reprezentuje część wzorca MVC. Jeśli potrzebujesz odwołać się do kontrolera lub widżetu w widoku, możesz użyć `$this->context`.
Aby zrenderować częściowy widok wewnątrz innego widoku, możesz użyć `$this->render()` zamiast dotychczasowego `$this->renderPartial()`.
Wywołanie `render` musi teraz też być bezpośrednio wyechowane, ponieważ metoda `render()` zwraca rezultat renderowania zamiast od razu go wyświetlać.
```php
echo $this->render('_item', ['item' => $item]);
```
Oprócz wykorzystania PHP jako podstawowego języka szablonów, Yii 2.0 oficjalnie wspiera dwa popularne silniki szablonów: Smarty i Twig (The Prado nie jest już wspierany).
Aby użyć któregokolwiek z tych silników, musisz skonfigurować komponent aplikacji `view` poprzez ustawienie właściwości [[yii\base\View::$renderers|View::$renderers]].
Po więcej szczegółów przejdź do sekcji [Silniki szablonów](tutorial-template-engines.md).
Modele
------
Yii 2.0 korzysta z [[yii\base\Model]] jako bazowego modelu, podobnie jak `CModel` w 1.1.
Klasa `CFormModel` została całkowicie usunięta, w Yii 2 należy rozszerzyć [[yii\base\Model]], aby stworzyć klasę modelu formularza.
Yii 2.0 wprowadza nową metodę [[yii\base\Model::scenarios()|scenarios()]], służącą do deklarowania scenariuszy, jak i do oznaczania, w którym scenariuszu
atrybut będzie wymagał walidacji, może być uznany za bezpieczny lub nie itp. Dla przykładu:
```php
public function scenarios()
{
return [
'backend' => ['email', 'role'],
'frontend' => ['email', '!role'],
];
}
```
Widzimy tutaj dwa zadeklarowane scenariusze: `backend` i `frontend`. W scenariuszu `backend` obydwa atrybuty,
`email` i `role`, są traktowane jako bezpieczne i mogą być przypisane zbiorczo. W przypadku scenariusza `frontend`,
`email` może być przypisany zbiorczo, ale `role` już nie. Zarówno `email` jak i `role` powinny przejść proces walidacji.
Metoda [[yii\base\Model::rules()|rules()]] wciąż służy do zadeklarowania zasad walidacji. Zauważ, że z powodu wprowadzenia [[yii\base\Model::scenarios()|scenarios()]],
nie ma już walidatora `unsafe`.
Jeśli metoda [[yii\base\Model::rules()|rules()]] deklaruje użycie wszystkich możliwych scenariuszy i jeśli nie masz potrzeby deklarowania atrybutów `unsafe` (niebezpiecznych),
w większości przypadków nie potrzebujesz nadpisywać metody [[yii\base\Model::scenarios()|scenarios()]].
Aby dowiedzieć się więcej o modelach, przejdź do sekcji [Modele](structure-models.md).
Kontrolery
----------
Yii 2.0 używa [[yii\web\Controller]] jako bazowej klasy kontrolera, podobnie do `CController` w Yii 1.1.
[[yii\base\Action]] jest bazową klasą dla akcji.
Najbardziej oczywistą implikacją tych zmian jest to, że akcja kontrolera powinna zwracać zawartość, którą chcesz wyświetlić, zamiast wyświetlać ją bezpośrednio:
```php
public function actionView($id)
{
$model = \app\models\Post::findOne($id);
if ($model) {
return $this->render('view', ['model' => $model]);
} else {
throw new \yii\web\NotFoundHttpException;
}
}
```
Przejdź do sekcji [Kontrolery](structure-controllers.md), aby poznać więcej szczegółów na ten temat.
Widżety
-------
Yii 2.0 korzysta z [[yii\base\Widget]] jako bazowej klasy widżetów, podobnie jak `CWidget` w Yii 1.1.
Dla lepszego wsparcia frameworka w aplikacjach IDE Yii 2.0 wprowadził nową składnię używania widżetów. Używane są teraz metody
[[yii\base\Widget::begin()|begin()]], [[yii\base\Widget::end()|end()]] i [[yii\base\Widget::widget()|widget()]] w następujący sposób:
```php
use yii\widgets\Menu;
use yii\widgets\ActiveForm;
// Zwróć uwagę na konieczność użycia "echo", aby wyświetlić rezultat
echo Menu::widget(['items' => $items]);
// Przekazujemy tablicę, aby zainicjalizować właściwości obiektu
$form = ActiveForm::begin([
'options' => ['class' => 'form-horizontal'],
'fieldConfig' => ['inputOptions' => ['class' => 'input-xlarge']],
]);
... pola formularza w tym miejscu ...
ActiveForm::end();
```
Więcej szczegółów na ten temat znajdziesz w sekcji [Widżety](structure-widgets.md).
Skórki i motywy (Theming)
-------------------------
Skórki działają zupełnie inaczej w 2.0. Oparte są teraz na mechanizmie mapowania ścieżki, który przekształca źródłowy plik widoku
w plik widoku skórki. Dla przykładu, jeśli mapa ścieżki dla skórki to `['/web/views' => '/web/themes/basic']`, to skórkowa wersja pliku widoku
`/web/views/site/index.php` to `/web/themes/basic/site/index.php`. Dzięki temu skórki mogą być użyte dla dowolnego pliku widoku, nawet w przypadku
widoku wyrenderowanego poza kontekstem kontrolera lub widżetu.
Nie ma również już komponentu `CThemeManager`. Zamiast tego `theme` jest konfigurowalną właściwością komponentu aplikacji `view`.
Sekcja [Skórki i motywy (Theming)](output-theming.md) zawiera więcej szczegółów na ten temat.
Aplikacje konsolowe
-------------------
Aplikacje konsolowe używają teraz kontrolerów tak jak aplikacje webowe. Kontrolery konsolowe powinny rozszerzać klasę
[[yii\console\Controller]], podobnie jak `CConsoleCommand` w 1.1.
Aby uruchomić polecenie konsoli, użyj `yii <route>`, gdzie `<route>` oznacza ścieżkę kontrolera (np. `sitemap/index`).
Dodatkowe anonimowe argumenty są przekazywane jako parametry do odpowiedniej metody akcji kontrolera, natomiast nazwane
argumenty są przetwarzane według deklaracji zawartych w [[yii\console\Controller::options()]].
Yii 2.0 wspiera automatyczne generowanie informacji pomocy poprzez bloki komentarzy.
Aby dowiedzieć się więcej na ten temat, przejdź do sekcji [Komendy konsolowe](tutorial-console.md).
I18N
----
Yii 2.0 usunął wbudowany formater dat i liczb na rzecz [modułu PECL intl PHP](http://pecl.php.net/package/intl).
Tłumaczenia wiadomości odbywają się teraz poprzez komponent aplikacji `i18n`, w którym można ustalić zestaw źródeł treści,
dzięki czemu możliwy jest ich wybór dla różnych kategorii wiadomości.
W sekcji [Internacjonalizacja](tutorial-i18n.md) znajdziesz więcej szczegółów na ten temat.
Filtry akcji
------------
Filtry akcji są implementowane od teraz za pomocą zachowań (behavior). Aby zdefiniować nowy filtr, należy rozszerzyć klasę [[yii\base\ActionFilter]].
Użycie filtru odbywa się poprzez dołączenie go do kontrolera jako zachowanie. Dla przykładu: aby użyć filtra [[yii\filters\AccessControl]], dodaj poniższy kod w kontrolerze:
```php
public function behaviors()
{
return [
'access' => [
'class' => 'yii\filters\AccessControl',
'rules' => [
['allow' => true, 'actions' => ['admin'], 'roles' => ['@']],
],
],
];
}
```
Więcej informacji na ten temat znajdziesz w sekcji [Filtry](structure-filters.md).
Zasoby (Assets)
---------------
Yii 2.0 wprowadza nowy mechanizm tzw. *pakietów zasobów*, który zastąpił koncepcję pakietów skryptowych z Yii 1.1.
Pakiet zasobów jest kolekcją plików zasobów (np. plików JavaScript, CSS, obrazków, itd.) zgromadzoną w folderze.
Każdy pakiet jest reprezentowany przez klasę rozszerzającą [[yii\web\AssetBundle]]. Zarejestrowanie pakietu poprzez
metodę [[yii\web\AssetBundle::register()]] pozwala na udostępnienie go publicznie. W przeciwieństwie do rozwiązania z Yii 1,
strona rejestrująca pakiet będzie automatycznie zawierać referencje do plików JavaScript i CSS wymienionych na jego liście.
Sekcja [Zasoby (Assets)](structure-assets.md) zawiera szczegółowe informacje na ten temat.
Klasy pomocnicze
----------------
Yii 2.0 zawiera wiele powszechnie używanych statycznych klas pomocniczych (helperów), takich jak:
* [[yii\helpers\Html]]
* [[yii\helpers\ArrayHelper]]
* [[yii\helpers\StringHelper]]
* [[yii\helpers\FileHelper]]
* [[yii\helpers\Json]]
W sekcji [Klasy pomocnicze](helper-overview.md) znajdziesz więcej informacji na ten temat.
Formularze
----------
Yii 2.0 wprowadza koncepcję *pola* do budowy formularzy, korzystając z klasy [[yii\widgets\ActiveForm]].
Pole jest kontenerem składającym się z etykiety, pola wprowadzenia danych formularza, informacji o błędzie i/lub tekstu podpowiedzi, reprezentowanym
przez obiekt klasy [[yii\widgets\ActiveField|ActiveField]].
Używając pól, możesz stworzyć formularz w sposób o wiele prostszy i bardziej przejrzysty niż do tej pory:
```php
<?php $form = yii\widgets\ActiveForm::begin(); ?>
<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group">
<?= Html::submitButton('Login') ?>
</div>
<?php yii\widgets\ActiveForm::end(); ?>
```
Aby dowiedzieć się więcej na ten temat, przejdź do sekcji [Tworzenie formularzy](input-forms.md).
Konstruktor kwerend
-------------------
W 1.1 budowanie kwerend było rozrzucone pomiędzy kilka klas, tj. `CDbCommand`, `CDbCriteria` i `CDbCommandBuilder`.
Yii 2.0 reprezentuje kwerendę bazodanową w postaci obiektu [[yii\db\Query|Query]], który może być zamieniony
w komendę SQL za pomocą [[yii\db\QueryBuilder|QueryBuilder]].
Przykładowo:
```php
$query = new \yii\db\Query();
$query->select('id, name')
->from('user')
->limit(10);
$command = $query->createCommand();
$sql = $command->sql;
$rows = $command->queryAll();
```
Co najlepsze, taki sposób tworzenia kwerend może być również wykorzystany przy pracy z [Rekordem aktywnym](db-active-record.md).
Po więcej szczegółów udaj się do sekcji [Konstruktor kwerend](db-query-builder.md).
Rekord aktywny
--------------
Yii 2.0 wprowadza sporo zmian w [Rekordach aktywnych](db-active-record.md). Dwie najbardziej znaczące to
konstruowanie kwerend i obsługa relacji.
Klasa `CDbCriteria` z 1.1 została zastąpiona przez [[yii\db\ActiveQuery]] w Yii 2. Klasa ta rozszerza [[yii\db\Query]], dzięki czemu
dziedziczy wszystkie metody konstruowania kwerend. Aby rozpocząć budowanie kwerendy, wywołaj metodę [[yii\db\ActiveRecord::find()]]:
```php
// Pobranie wszystkich *aktywnych* klientów i posortowanie po ich ID:
$customers = Customer::find()
->where(['status' => $active])
->orderBy('id')
->all();
```
Deklaracja relacji polega na prostym zdefiniowaniu metody gettera, który zwróci obiekt [[yii\db\ActiveQuery|ActiveQuery]].
Nazwa właściwości określonej przez tego gettera reprezentuje nazwę stworzonej relacji. Dla przykładu: w poniższym kodzie deklarujemy
relację `orders` (w 1.1 konieczne było zadeklarowanie relacji wewnątrz wydzielonej specjalnie metody `relations()`):
```php
class Customer extends \yii\db\ActiveRecord
{
public function getOrders()
{
return $this->hasMany('Order', ['customer_id' => 'id']);
}
}
```
Od tej pory można posługiwać się `$customer->orders`, aby uzyskać dostęp do tabeli zamówień klientów poprzez relację. Dodatkowo można również posłużyć się
następującym kodem, aby wywołać relacyjną kwerendę dla zadanych warunków:
```php
$orders = $customer->getOrders()->andWhere('status=1')->all();
```
Przy "gorliwym" pobieraniu relacji ("eager", w przyciwieństwie do leniwego pobierania "lazy") Yii 2.0 działa inaczej niż w wersji 1.1. W 1.1 tworzono kwerendę JOIN,
aby pobrać zarówno główne, jak i relacyjne rekordy. W Yii 2.0 wywoływane są dwie komendy SQL bez użycia JOIN - pierwsza pobiera główne rekordy, a druga relacyjne, filtrując je
przy użyciu kluczy głównych rekordów.
Aby zmniejszyć zużycie CPU i pamięci, zamiast zwracać obiekty [[yii\db\ActiveRecord|ActiveRecord]], do kwerendy pobierającej dużą ilość rekordów możesz podpiąć metodę
[[yii\db\ActiveQuery::asArray()|asArray()]], dzięki czemu zostaną one pobrane jako tablice. Przykładowo:
```php
$customers = Customer::find()->asArray()->all();
```
Inną istotną zmianą jest to, że nie można już definiować domyślnych wartości atrybutów poprzez publiczne właściwości.
Jeśli potrzebujesz takich definicji, powinieneś przypisać je wewnątrz metody `init` w klasie rekordu.
```php
public function init()
{
parent::init();
$this->status = self::STATUS_NEW;
}
```
Nadpisywanie konstruktora klasy ActiveRecord w 1.1 wiązało się z pewnymi problemami, co nie występuje już w wersji 2.0.
Zwróć jednak uwagę na to, że przy dodawaniu parametrów do konstruktora możesz potrzebować nadpisać metodę [[yii\db\ActiveRecord::instantiate()]].
W nowym rekordzie aktywnym znajdziesz wiele innych zmian i udogodnień. Aby zapoznać się z nimi, przejdź do sekcji [Rekord aktywny](db-active-record.md).
Zachowania rekordu aktywnego
----------------------------
W 2.0 zrezygnowaliśmy z bazowej klasy zachowania `CActiveRecordBehavior`. Jeśli chcesz stworzyć zachowanie dla rekordu aktywnego, musisz
rozszerzyć bezpośrednio klasę `yii\base\Behavior`. Jeśli klasa zachowania ma reagować na zdarzenia, powinna nadpisywać metodę `events()`, jak zaprezentowano poniżej:
```php
namespace app\components;
use yii\db\ActiveRecord;
use yii\base\Behavior;
class MyBehavior extends Behavior
{
// ...
public function events()
{
return [
ActiveRecord::EVENT_BEFORE_VALIDATE => 'beforeValidate',
];
}
public function beforeValidate($event)
{
// ...
}
}
```
Klasa User i IdentityInterface
------------------------------
Klasa `CWebUser` z 1.1 została zastąpiona przez [[yii\web\User]] i nie ma już klasy `CUserIdentity`.
Zamiast tego należy zaimplementować interfejs [[yii\web\IdentityInterface]], który jest znacznie bardziej wygodny i oczywisty w użyciu.
Szablon zaawansowanego projektu zawiera przykład takiego właśnie użycia.
Po więcej szczegółów zajrzyj do sekcji [Uwierzytelnianie](security-authentication.md), [Autoryzacja](security-authorization.md) i [Szablon zaawansowanego projektu](https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/README.md).
Zarządzanie adresami URL
------------------------
Zarządzanie adresami URL w Yii 2 jest bardzo podobne do tego znanego z 1.1. Głównym ulepszeniem tego mechanizmu jest teraz wsparcie dla parametrów opcjonalnych.
Dla przykładu: warunek dla adresu zadeklarowany poniżej obejmie zarówno `post/popular` jak i `post/1/popular`. W 1.1 konieczne byłoby napisanie dwóch warunków, aby
osiągnąć to samo.
```php
[
'pattern' => 'post/<page:\d+>/<tag>',
'route' => 'post/index',
'defaults' => ['page' => 1],
]
```
Przejdź do sekcji [Zarządzania adresami URL](runtime-routing.md) po więcej informacji.
Istotną zmianą konwencji nazw dla adresów jest to, że nazwy kontrolerów i akcji typu "camel case" są teraz
konwertowane do małych liter, z każdym słowem oddzielonym za pomocą myślnika, np. ID kontrolera `CamelCaseController` zostanie
przekształcone w `camel-case`.
Zapoznaj się z sekcją dotyczącą [ID kontrolerów](structure-controllers.md#controller-ids) i [ID akcji](structure-controllers.md#action-ids).
Korzystanie z Yii 1.1 i 2.x jednocześnie
----------------------------------------
Jeśli chciałbyś skorzystać z kodu napisanego dla Yii 1.1 w aplikacji Yii 2.0, prosimy o zapoznanie się z sekcją [Praca z kodem zewnętrznym](tutorial-yii-integration.md).

View File

@ -2,52 +2,56 @@ Czym jest Yii
============= =============
Yii jest wysoko wydajnym, opartym na komponentach frameworkiem PHP do szybkiego programowania Yii jest wysoko wydajnym, opartym na komponentach frameworkiem PHP do szybkiego programowania
nowoczesnych stron internetowych. Nazwa Yii (wymawiana [ji:]) znaczy po chińsku "prosto i ewolucyjnie". nowoczesnych stron internetowych. Nazwa Yii (wymawiana [ji:]) oznacza w języku chińskim "prosto i ewolucyjnie".
Może to być również rozumiane jako akronim dla Yes It Is! Może to być również rozumiane jako akronim dla **Yes It Is**!
Do czego Yii jest najlepsze ? Dla jakich zastosowań Yii jest najlepszy?
============================= -----------------------------------------
Yii jest frameworkiem www ogólnego przeznaczenia, co znaczy że może być użyte do kodowania Yii jest frameworkiem ogólnego przeznaczenia, co oznacza, że może być wykorzystany do stworzenia
wszystkich rodzajów aplikacji webowych używających PHP. Z uwagi na architekturę każdego rodzaju aplikacji internetowych korzystających z PHP. Z uwagi na architekturę
opartą na komponentach i wyrafinowane wsparcie dla mechanizmów buforowania, jest on odpowiedni opartą na komponentach i zaawansowane wsparcie dla mechanizmów pamięci podręcznej jest on odpowiedni
do tworzenia wielkich aplikacji jak portale, fora, systemy zarządzania treścią (CMS), do tworzenia rozbudowanych aplikacji, takich jak: portale, fora, systemy zarządzania treścią (CMS),
projekty komercyjne (e-sklepy), usługi webowe i inne. projekty komercyjne (e-sklepy), usługi sieciowe i inne.
Jak wygląda porównanie Yii z innymi frameworkami ?
==================================================
Jeśli już znasz inny framework, możesz docenić następujące cechy: Jak wygląda porównanie Yii z innymi frameworkami?
-------------------------------------------------
* Jak wiele frameworków, Yii implementuje architekturę MVC (model-widok-kontroller) Jeśli korzystałeś już z innych frameworków, na pewno docenisz, jak Yii wypada na ich tle:
i wspiera organizację kodu zgodną z tym wzorcem.
* Yii opiera się na filozofii że kod powinien być pisany prosto i elegancko. Yii nie próbuje przeprojektowywać * Jak większość frameworków, Yii wykorzystuje architekturę MVC (Model-Widok-Kontroler) i wspiera organizację kodu zgodną z tym wzorcem.
rzeczy tylko w celu dokładnego odwozowania wzorca projektowego. * Yii opiera się na filozofii, która mówi, że kod powinien być napisany w prosty, ale jednocześnie elegancki sposób. Yii nigdy nie będzie upierać się przy przeprojektowaniu
* Yii jest pełnym frameworkiem dostarczającym sprawdzone i gotowe do użycia funkcjonalności: konstruktory zapytań kodu jedynie w celu dokładnego trzymania się zasad wzorca projektowego.
i ActiveRecord dla baz danych relacyjnych oraz NoSql; wsparcie dla RESTFull API; * Yii jest w pełni rozwiniętym frameworkiem dostarczającym sprawdzonych i gotowych do użycia funkcjonalności: konstruktorów zapytań
wielostopniowe wsparcie dla buforowania; i więcej. oraz ActiveRecord dla baz danych relacyjnych i NoSQL, wsparcia dla tworzenia RESTful API oraz wielopoziomowych mechanizmów pamięci podręcznej i wielu, wielu innych.
* Yii jest niezwykle rozszerzalne. Możesz dostosować lub zmienić prawie każdy fragment rdzennego kodu. Możesz wykorzystać architekturę rozszerzeń, aby używać lub tworzyć łatwe do rozpowszechniania rozszerzenia. * Yii jest ekstremalnie rozszerzalny. Możesz dostosować lub wymienić praktycznie każdy fragment podstawowego kodu.
* Wysoka wydajność jest zawsze głównym celem w Yii. Dodatkowo Yii wykorzystuje architekturę rozszerzeń, dzięki czemu możesz w prosty sposób stworzyć i opublikować swoje własne moduły i widżety.
* Podstawowym celem, do którego Yii zawsze dąży, jest wysoka wydajność.
Yii nie jest efektem pracy pojedynczego programisty - projekt wspiera zarówno [grupa doświadczonych deweloperów][about_yii], jak i ogromna społeczność programistyczna, nieustannie
przyczyniając się do jego rozwoju. Deweloperzy trzymają rękę na pulsie najnowszych trendów Internetu, za pomocą prostych i eleganckich interfejsów wzbogacając Yii w najlepsze sprawdzone
rozwiązania i funkcjonalności, dostępne w innych frameworkach i projektach.
Wersje Yii Wersje Yii
========== ----------
Yii aktualnie dostępny jest w dwóch głównych wersjach: 1.1 i 2.0. Wersja 1.1 jest kodem starszej generacji, obecnie w fazie utrzymaniowej.
Wersja 2.0 jest całkowicie przepisaną wersją Yii z uwzględnieniem najnowszych protokołów i technologii, takich jak Composer, PSR, przestrzenie nazw, traity i wiele innych.
2.0 reprezentuje aktualną generację frameworka i na niej skupi się głównie praca programistów w ciągu najbliższych lat.
Ten przewodnik opisuje wersję 2.0.
Yii ma aktualnie <i>(2014-12-28 - przyp tłumacza)</i> rozpowszechniane dwie główne wersje: 1.1 i 2.0. Wersja 1.1 jest starszej generacji <i>(dla PHP 5.1)</i>
i jest w fazie utrzymaniowej. Wersja 2.0 jest całkowiecie przepisaną wersją Yii uwzględniającą
najnowsze technologie i protokoły, w tym Composer,PSR,przestrzenie nazw, traity i więcej.
Wersja 2.0 reprezentuje aktualną generację frameworka i otrzyma największe wsparcie programistów
przez najbliższe lata. Ten podręcznik jest wyłącznie o wersji 2.0.
Wymagania i zależności Wymagania i zależności
====================== ----------------------
Yii 2.0 wymaga PHP 5.4.0 lub nowszego. Dokładniejsze wymagania dla konkretnych funkcjonalności Yii 2.0 wymaga PHP w wersji 5.4.0 lub nowszej. Aby otrzymać więcej informacji na temat wymagań i indywidualnych funkcjonalności,
możesz sprawdzić uruchamiając tester wymagań `requirements.php` dołączony w każdym wydaniu Yii. uruchom specjalny skrypt testujący system `requirements.php`, dołączony w każdym wydaniu Yii.
Używanie Yii wymaga podstawowej wiedzy o programowaniu obiektowym w PHP (OOP), ponieważ Yii Używanie Yii wymaga podstawowej wiedzy o programowaniu obiektowym w PHP (OOP), ponieważ Yii
jest frameworkiem czysto obiektowym. Yii 2.0 wykorzystuje ostatnie udoskonalenia w PHP, jak jest frameworkiem czysto obiektowym. Yii 2.0 wykorzystuje ostatnie udoskonalenia w PHP, jak
przestrzenie nazw i traity. Zrozumienie tych konstrukcji pomoże ci łatwiej zdecydować się na Yii 2.0. [przestrzenie nazw](http://www.php.net/manual/pl/language.namespaces.php) i [traity](http://www.php.net/manual/pl/language.oop5.traits.php).
Zrozumienie tych konstrukcji pomoże Ci szybciej i łatwiej rozpocząć pracę z Yii 2.0.
.