From 571a936327d843789a06a4974d88c5428542aef9 Mon Sep 17 00:00:00 2001 From: Daniel Filipek Date: Fri, 15 Jan 2016 13:23:30 +0100 Subject: [PATCH 1/4] tutorial-mailing.md 100% --- docs/guide-pl/tutorial-mailing.md | 224 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 docs/guide-pl/tutorial-mailing.md diff --git a/docs/guide-pl/tutorial-mailing.md b/docs/guide-pl/tutorial-mailing.md new file mode 100644 index 0000000..8fec4a9 --- /dev/null +++ b/docs/guide-pl/tutorial-mailing.md @@ -0,0 +1,224 @@ +Wysyłanie poczty +======= + +> Note: Ta sekcja jest w trakcie tworzenia. + +Yii wspiera tworzenie oraz wysyłanie wiadomości email, jednakże silnik dostarcza jedynie funkcjonalność składania treści oraz prosty interfejs. +Mechanizm wysyłania wiadomości powinien być dostarczony przez rozszerzenie, +ponieważ projekty mogą wymagać różnych implementacji, przez co mechanizm jest zależny od zewnętrznych usług i bibliotek. + +Dla większości przypadków możesz używać oficjalnego rozszerzenia [yii2-swiftmailer](https://github.com/yiisoft/yii2-swiftmailer). + + +Konfiguracja +------------- + +Konfiguracja tego komponentu zależy od rozszerzenia jakie wybrałeś. +Generalnie, konfiguracja Twojego komponentu w aplikacji powinna wyglądać tak: + +```php +return [ + //.... + 'components' => [ + 'mailer' => [ + 'class' => 'yii\swiftmailer\Mailer', + ], + ], +]; +``` + + +Podstawowe użycie +----------- +Kiedy komponent 'mailer' zostanie skonfigurowany, możesz użyć następującego kodu do wysłania wiadomości email: + +```php +Yii::$app->mailer->compose() + ->setFrom('from@domain.com') + ->setTo('to@domain.com') + ->setSubject('Temat wiadomości') + ->setTextBody('Zwykła treść wiadomości') + ->setHtmlBody('Treść HTML wiadomości') + ->send(); +``` + +W powyższym przykładzie metoda `compose()` tworzy instancję wiadomości email, która następnie jest wypełniana danymi i wysłana. +Możesz utworzyć tutaj więcej złożonej logiki jeśli jest to potrzebne: + +```php +$message = Yii::$app->mailer->compose(); +if (Yii::$app->user->isGuest) { + $message->setFrom('from@domain.com') +} else { + $message->setFrom(Yii::$app->user->identity->email) +} +$message->setTo(Yii::$app->params['adminEmail']) + ->setSubject('Temat wiadomości') + ->setTextBody('Zwykła treść wiadomości') + ->send(); +``` + +> Note: każde rozszerzenie mailingowe posiada dwie główne klasy: 'Mailer' oraz 'Message'. Klasa 'Mailer' zawsze posiada nazwę klasy 'Message'. +Nie próbuj instancjować obiektu 'Message' bezpośrednio - zawsze używaj do tego metody `compose()`. + +Możesz również wysłać wiele wiadomości na raz: + +```php +$messages = []; +foreach ($users as $user) { + $messages[] = Yii::$app->mailer->compose() + // ... + ->setTo($user->email); +} +Yii::$app->mailer->sendMultiple($messages); +``` + +Niektóre rozszerzenia mailingowe mogą czerpać korzyści z tego sposobu, np. używając pojedyńczych wiadomości sieciowych. + + +Tworzenie treści maila +---------------------- + +Yii pozwala na tworzenie treści aktualnej wiadomości email przez specjalne pliki widoków. +Domyślnie, pliki te zlokalizowane są w ścieżce '@app/mail'. + +Przykładowy widok pliku treści wiadomości email: + +```php + +

Ta wiadomość pozwala Ci odwiedzić stronę główną naszej witryny przez jedno kliknięcie

+ +``` + +W celu wykorzystania tego pliku do utworzenia treści wiadomości, przekaż po prostu nazwę tego widoku do metody `compose()`: + +```php +Yii::$app->mailer->compose('home-link') // wynik renderingu widoku staje się treścią wiadomości + ->setFrom('from@domain.com') + ->setTo('to@domain.com') + ->setSubject('Temat wiadomości') + ->send(); +``` + +Możesz przekazać dodatkowe parametry do metody `compose()`, które będą dostępne w plikach widoków: + +```php +Yii::$app->mailer->compose('greetings', [ + 'user' => Yii::$app->user->identity, + 'advertisement' => $adContent, +]); +``` + +Możesz określić różne pliki do zwykłej treści oraz treści HTML: + +```php +Yii::$app->mailer->compose([ + 'html' => 'contact-html', + 'text' => 'contact-text', +]); +``` + +Jeśli określisz nazwę widoku jako ciąg skalarny, to wynik jego renderowania zostanie użyty jako ciało HTML wiadomości, +podczas gdy przy użyciu zwykłego teksu zostanie ono utworzone przez usunięcie wszystkich encji HTML z tego widoku. + +Wynik renderowania widoku może zostać opakowany w szablon. Szablon możesz ustawić przez właściwość [[yii\mail\BaseMailer::htmlLayout]] lub [[yii\mail\BaseMailer::textLayout]]. +Zadziała to w identyczny sposób co w standardowej aplikacji web. +Szalony mogą zostać użyte do ustawienia styli CSS, lub innej wspólnej treści: + +```php + +beginPage() ?> + + + + + + head() ?> + + + beginBody() ?> + + + endBody() ?> + + +endPage() ?> +``` + + +Załączniki do wiadomości +--------------- + +Możesz dodać załączniki do wiadomości przez użycie metod `attach()` oraz `attachContent()`: + +```php +$message = Yii::$app->mailer->compose(); + +// Załącz plik z lokalnego systemu plików: +$message->attach('/path/to/source/file.pdf'); + +// Utwórz załącznik w locie: +$message->attachContent('Attachment content', ['fileName' => 'attach.txt', 'contentType' => 'text/plain']); +``` + + +Osadzanie obrazków +---------------- + +W treści wiadomości możesz osadzać również obrazki przy użyciu metody `embed()`. Metoda ta zwraca ID załącznika, +który powinien zostać później użyty w tagu 'img'. +Użycie tej metody jest proste podczas tworzenia treści wiadomości z pliku widoku: + +```php +Yii::$app->mailer->compose('embed-email', ['imageFileName' => '/path/to/image.jpg']) + // ... + ->send(); +``` + +Następnie, w pliku widoku możesz użyć następującego kodu: + +```php + +``` + + +Testowanie i debugowanie +--------------------- + +Deweloperzy często muszą sprawdzić, czy emaile zostały wysłane przez aplikację lub jaka była ich treść. +Możesz tego dokonać w łatwy sposób, używając dostarczonej przez Yii funkcjonalności, którą aktywujesz przez parametr `yii\mail\BaseMailer::useFileTransport`. +Jeśli zostanie aktywowana, każda wiadomość email będzie zapisywana do lokalnych plików zamiast zostać wysłana. Wszystkie pliki będą zapisane w ścieżce podanej w +`yii\mail\BaseMailer::fileTransportPath`, która domyślnie ustawiona jest na '@runtime/mail'. + +> Note: możesz albo zapisywać wiadomości do plików, albo wysyłać je do odbiorców, nie można wykonać tych dwóch czynności na raz. + +Plik z wiadomością email może zostać otwarty przez standardowy edytor tekstu, dzięki czemu będziesz mógł przeglądać nagłówki oraz treść wiadomości. + +> Note: plik wiadomości jest tworzony przy użyciu metody `\yii\mail\MessageInterface::toString()`, więc jest zależny od aktualnie używanego rozszerzenia mailingowego w Twojej aplikacji. + +Tworzenie własnego rozwiązania mailingowego +------------------------------- + +Aby utworzyć swoje własne rozwiązanie mailingowe, musisz utworzyć 2 klasy: 'Mailer' oraz 'Message'. +Możesz rozszerzyć klasy `yii\mail\BaseMailer` i `yii\mail\BaseMessage` jako bazowe klasy do tego rozwiązania. +Zawierają one podstawową logikę mechanizmu mailingu, który został opisany w tej sekcji. +Oczywiście ich użycie nie jest obowiązkowe, wystarczy zaimplementowanie interfejsów `yii\mail\MailerInterface` oraz `yii\mail\MessageInterface`. +Kolejnie musisz zaimplementować wszystkie abstrakcyjne metody do swoich klas. \ No newline at end of file From bc37eadd84afbac7a3bec7dd01ba9f9236747953 Mon Sep 17 00:00:00 2001 From: Daniel Filipek Date: Thu, 28 Jan 2016 11:02:54 +0100 Subject: [PATCH 2/4] structure-application-components.md 100% --- docs/guide-pl/structure-application-components.md | 117 ++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 docs/guide-pl/structure-application-components.md diff --git a/docs/guide-pl/structure-application-components.md b/docs/guide-pl/structure-application-components.md new file mode 100644 index 0000000..47b5cf2 --- /dev/null +++ b/docs/guide-pl/structure-application-components.md @@ -0,0 +1,117 @@ +Komponenty aplikacji +====================== + +Aplikacje są [lokatorami usług](concept-service-locator.md). Posiadają one zestawy *komponentów aplikacji*, +które zajmują się dostarczaniem różnych serwisów do obsługi żądań. Dla przykładu, +komponent `urlManager` jest odpowiedzialny za przekierowania żądań do odpowiednich kontrolerów, +komponent `db` dostarcza serwisy powiązane z bazami danych, itp. + + +Każdy komponent aplikacji posiada unikalne ID identyfikujące go w całej aplikacji. +Możesz dostać się do tego komponentu przez wyrażenie: + +```php +\Yii::$app->componentID +``` + +Dla przykładu, możesz użyć `\Yii::$app->db` do uzyskania [[yii\db\Connection|DB connection]], +lub `\Yii::$app->cache` do uzyskania [[yii\caching\Cache|podstawowej pamięci podręcznej]] zarejestrowanej w aplikacji. + +Komponent jest tworzony przy pierwszym jego wywołaniu przez powyższe wyrażenie, każde kolejne wywołanie zwróci tą samą instancję tego komponentu. + +Komponentami aplikacji może być każdy objekt. Możesz je zarejestrować przez skonfigurowanie parametru [[yii\base\Application::components]] w [konfiguracji aplikacji](structure-applications.md#application-configurations). +Dla przykładu: + +```php +[ + 'components' => [ + // rejestracja komponentu "cache" przy użyciu nazwy klasy + 'cache' => 'yii\caching\ApcCache', + + // rejestracja komponentu "db" przy użyciu tablicy konfiguracyjnej + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=demo', + 'username' => 'root', + 'password' => '', + ], + + // rejestracja komponentu "search" przy użyciu funkcji anonimowej + 'search' => function () { + return new app\components\SolrService; + }, + ], +] +``` + +> Info: Możesz zarejestrować tak wiele komponentów jak chcesz, jednak powinieneś robić to rozważnie. +Komponenty aplikacji są podobne do zmiennych globalnych. +Używanie zbyt wielu komponentów może potencjalnie uczynić Twój kod trudniejszym do testowania i utrzymania. +W wielu przypadkach, możesz po prostu utworzyć lokalny komponent i użyć go kiedy potrzebujesz. + + +## Bootstrapping komponentów + +Tak jak było wspomniane wcześniej, komponent aplikacji zostanie zinstancjowany tylko jeśli zostanie wywołany po raz pierwszy. +Czasami jednak chcemy aby komponent został zainstancjowany dla każdego żądania, nawet jeśli nie jest bezpośrednio wywoływany. +Aby to osiągnąć, możesz wylistować ID komponentów w właściwości [[yii\base\Application::bootstrap|bootstrap]] aplikacji. + + +Dla przykładu, następująca konfiguracja aplikacji zapewnia załadowanie komponentu `log` przy każdym żądaniu: + +```php +[ + 'bootstrap' => [ + 'log', + ], + 'components' => [ + 'log' => [ + // konfiguracja komponentu `log` + ], + ], +] +``` + + +## Podstawowe komponenty aplikacji + +Yii posiada podstawowe komponenty aplikacji ze stałymi ID oraz domyślną ich konfiguracją. Dla przykładu, +komponent [[yii\web\Application::request|request]] jest używany do zbierania informacji na temat żądania użytkownika +oraz przekazanie go do [route'a](runtime-routing.md); [[yii\base\Application::db|db]] reprezentuje +połączenie z bazą danych, dzięki któremu możesz wykonywać zapytania do bazy. +Z pomocą tych podstawowych komponentów aplikacja jest w stanie obsłużyć żądania użytkowników. + +Poniżej znajduje się lista predefiniowanych podstawowych komponentów aplikacji. Możesz je konfigurować lub zmieniać, +tak jak z normalnymi komponentami. Podczas konfigurowania podstawowych komponentów aplikacji, w przypadku nie podania klasy, +zostanie użyta klasa domyślna. + +* [[yii\web\AssetManager|assetManager]]: zarządzanie zasobami oraz ich publikacja. + Po więcej informacji zajrzyj do sekcji [Assets](structure-assets.md). +* [[yii\db\Connection|db]]: reprezentuje połączenie z bazą danych, dzięki której możliwe jest wykonywanie zapytań do bazy. + Konfigurując ten komponent musisz określić klasę komponentu, tak samo jak inne wymagane właściwości, np. [[yii\db\Connection::dsn]]. + Po więcej informacji zajrzyj do sekcji [Obiekty dostępu do danych (DAO)](db-dao.md). +* [[yii\base\Application::errorHandler|errorHandler]]: obsługuje błędy oraz wyjątki PHP. + Po więcej informacji zajrzyj do sekcji [Obsługa błędów](runtime-handling-errors.md). +* [[yii\i18n\Formatter|formatter]]: formatuje dane kiedy są wyświetlane użytkownikom. Dla przykładu, + liczba może zostać wyświetlona z separatorem tysięcy. + Po więcej informacji zajrzyj do sekcji [Formatowanie danych](output-formatting.md). +* [[yii\i18n\I18N|i18n]]: wspiera tłumaczenie i formatowanie wiadomości. + Po więcej informacji zajrzyj do sekcji [Internacjonalizacja](tutorial-i18n.md). +* [[yii\log\Dispatcher|log]]: zarządza logowaniem informacji oraz błędów + Po więcej informacji zajrzyj do sekcji [Logowanie](runtime-logging.md). +* [[yii\swiftmailer\Mailer|mail]]: wspiera tworzenie oraz wysyłanie emaili. + Po więcej informacji zajrzyj do sekcji [Wysyłanie poczty](tutorial-mailing.md). +* [[yii\base\Application::response|response]]: reprezentuje odpowiedź wysyłaną do użytkowników. + Po więcej informacji zajrzyj do sekcji [Odpowiedzi](runtime-responses.md). +* [[yii\base\Application::request|request]]: reprezentuje żądanie otrzymane od użytkownika. + Po więcej informacji zajrzyj do sekcji [Żądania](runtime-requests.md). +* [[yii\web\Session|session]]: reprezentuje informacje przetrzymywane w sesji. Ten komponent jest dostępny + tylko w [[yii\web\Application|aplikacjach WEB]]. + Po więcej informacji zajrzyj do sekcji [Sesje i ciasteczka](runtime-sessions-cookies.md). +* [[yii\web\UrlManager|urlManager]]: wspiera przetwarzania oraz tworzenie adresów URL. + Po więcej informacji zajrzyj do sekcji [Przetwarzanie i tworzenie adresów URL](runtime-routing.md) +* [[yii\web\User|user]]: reprezentuje informacje dotyczące uwierzytelniania użytkownika. Ten komponent jest dostępny + tylko w [[yii\web\Application|aplikacjach WEB]]. + Po więcej informacji zajrzyj do sekcji [Uwierzytelnianie](security-authentication.md). +* [[yii\web\View|view]]: wspiera renderowanie widoków. + Po więcej informacji zajrzyj do sekcji [Widoki](structure-views.md). From 86f8aa0aa1e5c7456afa79cf9a7b49ea1f3d0999 Mon Sep 17 00:00:00 2001 From: Bizley Date: Fri, 29 Jan 2016 21:42:41 +0100 Subject: [PATCH 3/4] Links shortening and fixes --- docs/guide-pl/caching-page.md | 2 +- docs/guide-pl/concept-components.md | 12 ++-- docs/guide-pl/db-active-record.md | 78 ++++++++++----------- docs/guide-pl/glossary.md | 6 +- docs/guide-pl/helper-overview.md | 12 ++-- docs/guide-pl/input-file-upload.md | 16 +++-- docs/guide-pl/input-forms.md | 48 ++++++------- docs/guide-pl/input-multiple-models.md | 6 +- docs/guide-pl/input-tabular-input.md | 20 +++--- docs/guide-pl/input-validation.md | 17 ++--- docs/guide-pl/intro-upgrade-from-v1.md | 57 ++++++++-------- docs/guide-pl/output-client-scripts.md | 13 ++-- docs/guide-pl/output-pagination.md | 10 +-- docs/guide-pl/rest-error-handling.md | 4 +- docs/guide-pl/rest-rate-limiting.md | 8 +-- docs/guide-pl/rest-routing.md | 12 ++-- docs/guide-pl/runtime-overview.md | 35 +++++----- docs/guide-pl/start-databases.md | 57 +++++++++------- docs/guide-pl/start-forms.md | 57 +++++++++------- docs/guide-pl/start-gii.md | 51 ++++++++------ docs/guide-pl/start-hello.md | 43 +++++++----- docs/guide-pl/start-installation.md | 83 +++++++++++++---------- docs/guide-pl/start-looking-ahead.md | 28 ++++---- docs/guide-pl/start-workflow.md | 22 +++--- docs/guide-pl/structure-application-components.md | 56 +++++++-------- docs/guide-pl/structure-entry-scripts.md | 4 +- docs/guide-pl/structure-overview.md | 2 +- docs/guide-pl/test-acceptance.md | 2 +- docs/guide-pl/test-environment-setup.md | 8 +-- docs/guide-pl/test-functional.md | 2 +- docs/guide-pl/tutorial-mailing.md | 20 +++--- docs/guide-pl/tutorial-start-from-scratch.md | 9 +-- 32 files changed, 434 insertions(+), 366 deletions(-) diff --git a/docs/guide-pl/caching-page.md b/docs/guide-pl/caching-page.md index f169a51..7de78b4 100644 --- a/docs/guide-pl/caching-page.md +++ b/docs/guide-pl/caching-page.md @@ -4,7 +4,7 @@ Pamięć podręczna stron Pamięć podręczna stron odnosi się do zapisu zawartości całej strony po stronie serwera. Kiedy zostanie ona ponownie wywołana, zawartość zostanie wyświetlona od razu z pamięci podręcznej zamiast generować ją ponownie od podstaw. -Pamięć podręczna stron jest obsługiwana przez [[yii\filters\PageCache]], [filtr akcji](structure-filters.md). +Pamięć podręczna stron jest obsługiwana przez [filtr akcji](structure-filters.md) [[yii\filters\PageCache|PageCache]]. Poniżej znajdziesz przykładowy sposób użycia w klasie kontrolera: ```php diff --git a/docs/guide-pl/concept-components.md b/docs/guide-pl/concept-components.md index 304cf54..9c313a5 100644 --- a/docs/guide-pl/concept-components.md +++ b/docs/guide-pl/concept-components.md @@ -1,7 +1,7 @@ Komponenty ========== -Komponenty są głównym budulcem aplikacji Yii. Komponenty to instancje klasy [[yii\base\Component]] lub jej potomnych. +Komponenty są głównym budulcem aplikacji Yii. Komponenty to instancje klasy [[yii\base\Component|Component]] lub jej potomnych. Trzy główne funkcjonalności, które zapewniają komponenty innym klasom to: * [Właściwości](concept-properties.md) @@ -24,18 +24,18 @@ echo DatePicker::widget([ ]); ``` -Właściwości widżetu są w łatwy sposób konfigurowalne ponieważ jego klasa rozszerza [[yii\base\Component]]. +Właściwości widżetu są w łatwy sposób konfigurowalne ponieważ jego klasa rozszerza [[yii\base\Component|Component]]. Komponenty zapewniają duże możliwości, ale przez to są też bardziej zasobożerne od standardowych obiektów, ponieważ wymagają dodatkowej pamięci i czasu CPU dla wsparcia [eventów](concept-events.md) i [behaviorów](concept-behaviors.md) w szczególności. -Jeśli komponent nie wymaga tych dwóch funkcjonalności, należy rozważyć rozszerzenie jego klasy z [[yii\base\Object]] zamiast [[yii\base\Component]]. +Jeśli komponent nie wymaga tych dwóch funkcjonalności, należy rozważyć rozszerzenie jego klasy z [[yii\base\Object|Object]] zamiast [[yii\base\Component|Component]]. Dzięki temu komponent będzie tak samo wydajny jak standardowy obiekt PHP, ale z dodatkowym wsparciem [właściwości](concept-properties.md). -Rozszerzając klasę [[yii\base\Component]] lub [[yii\base\Object]], zalecane jest aby przestrzegać następującej konwencji: +Rozszerzając klasę [[yii\base\Component|Component]] lub [[yii\base\Object|Object]], zalecane jest aby przestrzegać następującej konwencji: - Przeciążając konstruktor, dodaj parametr `$config` jako *ostatni* na liście jego argumentów i przekaż go do konstruktora rodzica. - Zawsze wywoływuj konstruktor rodzica *na końcu* przeciążanego konstruktora. -- Przeciążając metodę [[yii\base\Object::init()]], upewnij się, że wywołujesz metodę `init` rodzica *na początku* własnej implementacji metody `init`. +- Przeciążając metodę [[yii\base\Object::init()|init()]], upewnij się, że wywołujesz metodę `init` rodzica *na początku* własnej implementacji metody `init`. Przykład: @@ -83,7 +83,7 @@ $component = \Yii::createObject([ > [kontener wstrzykiwania zależności](concept-di-container.md). -Klasa [[yii\base\Object]] wymusza następujący cykl życia obiektu: +Klasa [[yii\base\Object|Object]] wymusza następujący cykl życia obiektu: 1. Preinicjalizacja w konstruktorze. W tym miejscu można ustawić domyślne wartości właściwości. 2. Konfiguracja obiektu poprzez `$config`. Konfiguracja może nadpisać domyślne wartości ustawione w konstruktorze. diff --git a/docs/guide-pl/db-active-record.md b/docs/guide-pl/db-active-record.md index 54cab18..ee00957 100644 --- a/docs/guide-pl/db-active-record.md +++ b/docs/guide-pl/db-active-record.md @@ -47,7 +47,7 @@ W tej sekcji przewodnika opiszemy sposób użycia Active Record dla baz relacyjn ## Deklarowanie klas Active Record -Na początek zadeklaruj klasę typu Active Record rozszerzając [[yii\db\ActiveRecord]]. Ponieważ każda klasa Active Record +Na początek zadeklaruj klasę typu Active Record rozszerzając [[yii\db\ActiveRecord|ActiveRecord]]. Ponieważ każda klasa Active Record jest powiązana z tabelą bazy danych, należy nadpisać metodę [[yii\db\ActiveRecord::tableName()|tableName()]], aby wskazać odpowiednią tabelę. @@ -76,7 +76,7 @@ class Customer extends ActiveRecord Instancje Active Record są traktowane jak [modele](structure-models.md). Z tego powodu zwykle dodajemy klasy Active Record do przestrzeni nazw `app\models` (lub innej, przeznaczonej dla klas modeli). -Dzięki temu, że [[yii\db\ActiveRecord]] rozszerza [[yii\base\Model]], dziedziczy *wszystkie* funkcjonalności [modelu](structure-models.md), +Dzięki temu, że [[yii\db\ActiveRecord|ActiveRecord]] rozszerza [[yii\base\Model|Model]], dziedziczy *wszystkie* funkcjonalności [modelu](structure-models.md), takie jak atrybuty, zasady walidacji, serializację danych itd. @@ -120,13 +120,13 @@ class Customer extends ActiveRecord Po zadeklarowaniu klasy Active Record, możesz użyć jej do pobrania danych z powiązanej tabeli bazy danych. Proces ten zwykle sprowadza się do następujących trzech kroków: -1. Stworzenie nowego obiektu kwerendy za pomocą metody [[yii\db\ActiveRecord::find()]]; +1. Stworzenie nowego obiektu kwerendy za pomocą metody [[yii\db\ActiveRecord::find()|find()]]; 2. Zbudowanie obiektu kwerendy za pomocą [metod konstruktora kwerend](db-query-builder.md#building-queries); 3. Wywołanie [metod kwerendy](db-query-builder.md#query-methods) w celu uzyskania danych jako instancji klasy Active Record. Jak widać, procedura jest bardzo podobna do tej używanej przy [konstruktorze kwerend](db-query-builder.md). Jedyna różnica jest taka, że -zamiast użycia operatora `new` do stworzenia obiektu kwerendy, wywołujemy metodę [[yii\db\ActiveRecord::find()]], która zwraca -nowy obiekt kwerendy klasy [[yii\db\ActiveQuery]]. +zamiast użycia operatora `new` do stworzenia obiektu kwerendy, wywołujemy metodę [[yii\db\ActiveRecord::find()|find()]], która zwraca +nowy obiekt kwerendy klasy [[yii\db\ActiveQuery|ActiveQuery]]. Poniżej znajdziesz kilka przykładów pokazujących jak używać Active Query do pobierania danych: @@ -160,15 +160,15 @@ $customers = Customer::find() W powyższych przykładach `$customer` jest obiektem typu `Customer`, a `$customers` jest tablicą obiektów typu `Customer`. W obu przypadkach dane pobrane są z tabeli `customer`. -> Info: Dzięki temu, że [[yii\db\ActiveQuery]] rozszerza klasę [[yii\db\Query]], możesz użyć *wszystkich* metod dotyczących kwerend i ich budowania +> Info: Dzięki temu, że [[yii\db\ActiveQuery|ActiveQuery]] rozszerza klasę [[yii\db\Query|Query]], możesz użyć *wszystkich* metod dotyczących kwerend i ich budowania > opisanych w sekcji [Konstruktor kwerend](db-query-builder.md). Ponieważ zwykle kwerendy korzystają z zapytań zawierających klucz główny lub też zestaw wartości dla kilku kolumn, Yii udostępnia dwie skrótowe metody, pozwalające na szybsze ich użycie: -- [[yii\db\ActiveRecord::findOne()]]: zwraca pojedynczą instancję klasy Active Record, zawierającą dane z pierwszego pobranego odpowiadającego zapytaniu +- [[yii\db\ActiveRecord::findOne()|findOne()]]: zwraca pojedynczą instancję klasy Active Record, zawierającą dane z pierwszego pobranego odpowiadającego zapytaniu wiersza danych. -- [[yii\db\ActiveRecord::findAll()]]: zwraca tablicę instancji klasy Active Record zawierających *wszystkie* wyniki zapytania. +- [[yii\db\ActiveRecord::findAll()|findAll()]]: zwraca tablicę instancji klasy Active Record zawierających *wszystkie* wyniki zapytania. Obie metody mogą przyjmować jeden z następujących formatów parametrów: @@ -203,12 +203,12 @@ $customers = Customer::findAll([ ]); ``` -> Note: Ani metoda [[yii\db\ActiveRecord::findOne()]] ani [[yii\db\ActiveQuery::one()]] nie dodaje `LIMIT 1` do wygenerowanej +> Note: Ani metoda [[yii\db\ActiveRecord::findOne()|findOne()]] ani [[yii\db\ActiveQuery::one()|one()]] nie dodaje `LIMIT 1` do wygenerowanej > kwerendy SQL. Jeśli zapytanie może zwrócić więcej niż jeden wiersz danych, należy wywołać bezpośrednio `limit(1)`, w celu zwiększenia > wydajności aplikacji, np. `Customer::find()->limit(1)->one()`. Oprócz korzystania z metod konstruktora kwerend możesz również użyć surowych zapytań SQL w celu pobrania danych do obiektu Active Record za -pomocą metody [[yii\db\ActiveRecord::findBySql()]]: +pomocą metody [[yii\db\ActiveRecord::findBySql()|findBySql()]]: ```php // zwraca wszystkich nieaktywnych klientów @@ -320,7 +320,7 @@ Używając Active Record możesz w łatwy sposób zapisać dane w bazie, w nast 1. Przygotowanie instancji Active Record 2. Przypisanie nowych wartości do atrybutów Active Record -3. Wywołanie metody [[yii\db\ActiveRecord::save()]] w celu zapisania danych w bazie. +3. Wywołanie metody [[yii\db\ActiveRecord::save()|save()]] w celu zapisania danych w bazie. Przykład: @@ -361,7 +361,7 @@ public function save($runValidation = true, $attributeNames = null) ### Walidacja danych -Dzięki temu, że [[yii\db\ActiveRecord]] rozszerza klasę [[yii\base\Model]], korzysta z tych samych mechanizmów [walidacji danych](input-validation.md). +Dzięki temu, że [[yii\db\ActiveRecord|ActiveRecord]] rozszerza klasę [[yii\base\Model|Model]], korzysta z tych samych mechanizmów [walidacji danych](input-validation.md). Możesz definiować zasady walidacji nadpisując metodę [[yii\db\ActiveRecord::rules()|rules()]] i uruchamiać procedurę walidacji wywołując metodę [[yii\db\ActiveRecord::validate()|validate()]]. @@ -406,7 +406,7 @@ $post = Post::findOne(100); $post->updateCounters(['view_count' => 1]); ``` -> Note: Jeśli używasz [[yii\db\ActiveRecord::save()]] do aktualizacji licznika, możesz otrzymać nieprawidłowe rezultaty, ponieważ jest możliwe, że +> Note: Jeśli używasz [[yii\db\ActiveRecord::save()|save()]] do aktualizacji licznika, możesz otrzymać nieprawidłowe rezultaty, ponieważ jest możliwe, że > ten sam licznik zostanie odczytany i zapisany jednocześnie przez wiele zapytań. @@ -417,8 +417,8 @@ Atrybut uznawany jest za *brudny* jeśli jego wartość została zmodyfikowana o Pamiętaj, że walidacja danych zostanie przeprowadzona niezależnie od tego, czy instancja Active Record zawiera brudne atrybuty czy też nie. Active Record automatycznie tworzy listę brudnych atrybutów, poprzez porównanie starej wartości atrybutu do aktualnej. Możesz wywołać metodę -[[yii\db\ActiveRecord::getDirtyAttributes()]], aby otrzymać najnowszą listę brudnych atrybutów. Dodatkowo można wywołać -[[yii\db\ActiveRecord::markAttributeDirty()]], aby oznaczyć konkretny atrybut jako brudny. +[[yii\db\ActiveRecord::getDirtyAttributes()|getDirtyAttributes()]], aby otrzymać najnowszą listę brudnych atrybutów. Dodatkowo można wywołać +[[yii\db\ActiveRecord::markAttributeDirty()|markAttributeDirty()]], aby oznaczyć konkretny atrybut jako brudny. Jeśli chcesz sprawdzić wartość atrybutu sprzed ostatniej zmiany, możesz wywołać [[yii\db\ActiveRecord::getOldAttributes()|getOldAttributes()]] lub [[yii\db\ActiveRecord::getOldAttribute()|getOldAttribute()]]. @@ -464,14 +464,14 @@ Customer::updateAllCounters(['age' => 1]); ## Usuwanie danych Aby usunąć pojedynczy wiersz danych, utwórz najpierw instancję Active Record odpowiadającą temu wierszowi, a następnie wywołaj metodę -[[yii\db\ActiveRecord::delete()]]. +[[yii\db\ActiveRecord::delete()|delete()]]. ```php $customer = Customer::findOne(123); $customer->delete(); ``` -Możesz również wywołać [[yii\db\ActiveRecord::deleteAll()]], aby usunąć kilka lub wszystkie wiersze danych. Dla przykładu: +Możesz również wywołać [[yii\db\ActiveRecord::deleteAll()|deleteAll()]], aby usunąć kilka lub wszystkie wiersze danych. Dla przykładu: ```php Customer::deleteAll(['status' => Customer::STATUS_INACTIVE]); @@ -513,11 +513,11 @@ Podczas pobierania danych za pomocą jednej z [metod kwerendy](#querying-data), Podczas wywołania [[yii\db\ActiveRecord::save()|save()]], w celu dodania lub uaktualnienia danych instancji Active Record, zachodzi następujący cykl: 1. [[yii\db\ActiveRecord::beforeValidate()|beforeValidate()]]: uruchamia event [[yii\db\ActiveRecord::EVENT_BEFORE_VALIDATE|EVENT_BEFORE_VALIDATE]]. - Jeśli metoda zwróci false lub właściwość [[yii\base\ModelEvent::isValid]] ma wartość false, kolejne kroki są pomijane. + Jeśli metoda zwróci false lub właściwość [[yii\base\ModelEvent::isValid|isValid]] ma wartość false, kolejne kroki są pomijane. 2. Proces walidacji danych. Jeśli proces zakończy się niepowodzeniem, kolejne kroki po kroku 3. są pomijane. 3. [[yii\db\ActiveRecord::afterValidate()|afterValidate()]]: uruchamia event [[yii\db\ActiveRecord::EVENT_AFTER_VALIDATE|EVENT_AFTER_VALIDATE]]. 4. [[yii\db\ActiveRecord::beforeSave()|beforeSave()]]: uruchamia event [[yii\db\ActiveRecord::EVENT_BEFORE_INSERT|EVENT_BEFORE_INSERT]] lub - [[yii\db\ActiveRecord::EVENT_BEFORE_UPDATE|EVENT_BEFORE_UPDATE]]. Jeśli metoda zwróci false lub właściwość [[yii\base\ModelEvent::isValid]] ma + [[yii\db\ActiveRecord::EVENT_BEFORE_UPDATE|EVENT_BEFORE_UPDATE]]. Jeśli metoda zwróci false lub właściwość [[yii\base\ModelEvent::isValid|isValid]] ma wartość false, kolejne kroki są pomijane. 5. Proces właściwego dodawania lub aktulizowania danych. 6. [[yii\db\ActiveRecord::afterSave()|afterSave()]]: uruchamia event [[yii\db\ActiveRecord::EVENT_AFTER_INSERT|EVENT_AFTER_INSERT]] lub @@ -529,17 +529,17 @@ Podczas wywołania [[yii\db\ActiveRecord::save()|save()]], w celu dodania lub ua Podczas wywołania [[yii\db\ActiveRecord::delete()|delete()]], w celu usunięcia danych instancji Active Record, zachodzi następujący cykl: 1. [[yii\db\ActiveRecord::beforeDelete()|beforeDelete()]]: uruchamia event [[yii\db\ActiveRecord::EVENT_BEFORE_DELETE|EVENT_BEFORE_DELETE]]. - Jeśli metoda zwróci false lub właściwość [[yii\base\ModelEvent::isValid]] ma wartość false, kolejne kroki są pomijane. + Jeśli metoda zwróci false lub właściwość [[yii\base\ModelEvent::isValid|isValid]] ma wartość false, kolejne kroki są pomijane. 2. Proces właściwego usuwania danych. 3. [[yii\db\ActiveRecord::afterDelete()|afterDelete()]]: uruchamia event [[yii\db\ActiveRecord::EVENT_AFTER_DELETE|EVENT_AFTER_DELETE]]. > Note: Wywołanie poniższych metod NIE uruchomi żadnego z powyższych cykli: > -> - [[yii\db\ActiveRecord::updateAll()]] -> - [[yii\db\ActiveRecord::deleteAll()]] -> - [[yii\db\ActiveRecord::updateCounters()]] -> - [[yii\db\ActiveRecord::updateAllCounters()]] +> - [[yii\db\ActiveRecord::updateAll()|updateAll()]] +> - [[yii\db\ActiveRecord::deleteAll()|deleteAll()]] +> - [[yii\db\ActiveRecord::updateCounters()|updateCounters()]] +> - [[yii\db\ActiveRecord::updateAllCounters()|updateAllCounters()]] ## Praca z transakcjami @@ -571,7 +571,7 @@ try { } ``` -Drugi sposób polega na utworzeniu listy operacji bazodanowych, które wymagają transakcji za pomocą metody [[yii\db\ActiveRecord::transactions()]]. +Drugi sposób polega na utworzeniu listy operacji bazodanowych, które wymagają transakcji za pomocą metody [[yii\db\ActiveRecord::transactions()|transactions()]]. Dla przykładu: ```php @@ -589,7 +589,7 @@ class Customer extends ActiveRecord } ``` -Metoda [[yii\db\ActiveRecord::transactions()]] powinna zwracać tablicę, której klucze są nazwami [scenariuszy](structure-models.md#scenarios) +Metoda [[yii\db\ActiveRecord::transactions()|transactions()]] powinna zwracać tablicę, której klucze są nazwami [scenariuszy](structure-models.md#scenarios), a wartości to operacje bazodanowe, które powinny być objęte transakcją. Używaj następujących stałych do określenia typu operacji: * [[yii\db\ActiveRecord::OP_INSERT|OP_INSERT]]: operacja dodawania wykonywana za pomocą [[yii\db\ActiveRecord::insert()|insert()]]; @@ -608,18 +608,18 @@ zmiany, użytkownik B klika przycisk "Zapisz", aby również wykonać identyczn artykułu, byłoby wskazane powstrzymać go przed nadpisaniem wersji użytkownika A i wyświelić komunikat wyjaśniający sytuację. Optymistyczne blokowanie rozwiązuje ten problem za pomocą dodatkowej kolumny w bazie przechowującej numer wersji każdego wiersza. -Kiedy taki wiersz jest zapisywany z wcześniejszym numerem wersji niż aktualna rzucany jest wyjątek [[yii\db\StaleObjectException]], który powstrzymuje +Kiedy taki wiersz jest zapisywany z wcześniejszym numerem wersji niż aktualna rzucany jest wyjątek [[yii\db\StaleObjectException|StaleObjectException]], który powstrzymuje zapis wiersza. Optymistyczne blokowanie może być użyte tylko przy aktualizacji lub usuwaniu istniejącego wiersza za pomocą odpowiednio -[[yii\db\ActiveRecord::update()]] lub [[yii\db\ActiveRecord::delete()]]. +[[yii\db\ActiveRecord::update()|update()]] lub [[yii\db\ActiveRecord::delete()|delete()]]. Aby skorzystać z optymistycznej blokady: 1. Stwórz kolumnę w tabeli bazy danych powiązaną z klasą Active Record do przechowywania numeru wersji każdego wiersza. Kolumna powinna być typu big integer (przykładowo w MySQL `BIGINT DEFAULT 0`). -2. Nadpisz metodę [[yii\db\ActiveRecord::optimisticLock()]], aby zwrócić nazwę tej kolumny. +2. Nadpisz metodę [[yii\db\ActiveRecord::optimisticLock()|optimisticLock()]], aby zwrócić nazwę tej kolumny. 3. W formularzu pobierającym dane od użytkownika, dodaj ukryte pole, gdzie przechowasz aktualny numer wersji uaktualnianego wiersza. Upewnij się, że atrybut wersji ma dodaną zasadę walidacji i przechodzi poprawnie jej proces. -4. W akcji kontrolera uaktualniającej wiersz za pomocą Active Record, użyj bloku try-catch, aby wyłapać wyjątek [[yii\db\StaleObjectException]]. +4. W akcji kontrolera uaktualniającej wiersz za pomocą Active Record, użyj bloku try-catch, aby wyłapać wyjątek [[yii\db\StaleObjectException|StaleObjectException]]. Zaimplemetuj odpowiednią logikę biznesową (np. scalenie zmian, wyświetlenie komunikatu o nieaktualnej wersji, itp.), aby rozwiązać konflikt. Dla przykładu, załóżmy, że kolumna wersji nazywa się `version`. Implementację optymistycznego blokowania można wykonać za pomocą następującego kodu: @@ -737,7 +737,7 @@ sytuacji, należy najpierw usunąć z pamięci właściwość relacyjną poprzez > Note: Pomimo podobieństwa mechanizmu relacji do [właściwości obiektu](concept-properties.md), jest tutaj znacząca różnica. > Wartości właściwości zwykłych obiektów są tego samego typu jak definiująca je metoda-getter. -> Metoda relacyjna zwraca jednak instancję [[yii\db\ActiveQuery]], a właściwości relacji są instancjami [[yii\db\ActiveRecord]] lub tablicą takich obiektów. +> Metoda relacyjna zwraca jednak instancję [[yii\db\ActiveQuery|ActiveQuery]], a właściwości relacji są instancjami [[yii\db\ActiveRecord|ActiveRecord]] lub tablicą takich obiektów. > > ```php > $customer->orders; // tablica obiektów `Order` @@ -749,7 +749,7 @@ sytuacji, należy najpierw usunąć z pamięci właściwość relacyjną poprzez ### Dynamiczne kwerendy relacyjne -Dzięki temu, że metoda relacyjna zwraca instancję [[yii\db\ActiveQuery]], możliwe jest dalsze rozbudowanie takiej kwerendy korzystając z +Dzięki temu, że metoda relacyjna zwraca instancję [[yii\db\ActiveQuery|ActiveQuery]], możliwe jest dalsze rozbudowanie takiej kwerendy korzystając z metod konstruowania kwerend. Dla przykładu: ```php @@ -894,7 +894,7 @@ foreach ($customers as $customer) { } ``` -Wywołanie metody [[yii\db\ActiveQuery::with()]] powoduje pobranie zamówień dla pierwszych 100 klientów w pojedynczej kwerendzie SQL, dzięki czemu +Wywołanie metody [[yii\db\ActiveQuery::with()|with()]] powoduje pobranie zamówień dla pierwszych 100 klientów w pojedynczej kwerendzie SQL, dzięki czemu redukujemy ilość zapytań ze 101 do 2! Możliwe jest gorliwe pobranie jednej lub wielu relacji, a nawet gorliwe pobranie *zagnieżdżonych relacji*. Zagnieżdżona relacja to taka, która @@ -946,7 +946,7 @@ $customers = Customer::find()->with([ ``` Dostosowując relacyjną kwerendę należy podać nazwę relacji jako klucz tablicy i użyć funkcji anonimowej jako odpowiadającej kluczowi wartości. -Funkcja anonimowa otrzymuje parametr `$query`, reprezentujący obiekt [[yii\db\ActiveQuery]], służący do wykonania relacyjnej kwerendy. +Funkcja anonimowa otrzymuje parametr `$query`, reprezentujący obiekt [[yii\db\ActiveQuery|ActiveQuery]], służący do wykonania relacyjnej kwerendy. W powyższym przykładzie modyfikujemy relacyjną kwerendę dodając warunek ze statusem zamówienia. > Note: Wywołując [[yii\db\Query::select()|select()]] podczas gorliwego pobierania relacji, należy upewnić się, że kolumny określone w deklaracji @@ -984,7 +984,7 @@ $customers = Customer::find() > Note: Podczas tworzenia relacyjnych kwerend zawierających instrukcję SQL JOIN koniecznym jest ujednoznacznienie nazw kolumn. > Standardową praktyką w takim wypadku jest poprzedzenie nazwy kolumny odpowiadającą jej nazwą tabeli. -Jeszcze lepszym rozwiązaniem jest użycie istniejącej deklaracji relacji wywołując metodę [[yii\db\ActiveQuery::joinWith()]]: +Jeszcze lepszym rozwiązaniem jest użycie istniejącej deklaracji relacji wywołując metodę [[yii\db\ActiveQuery::joinWith()|joinWith()]]: ```php $customers = Customer::find() @@ -1015,7 +1015,7 @@ $customers = Customer::find()->joinWith([ ``` Czasem, przyłączając dwie tabele, musisz sprecyzować dodatkowe warunki dla części `ON` kwerendy JOIN. -Można to zrobić wywołując metodę [[yii\db\ActiveQuery::onCondition()]] w poniższy sposób: +Można to zrobić wywołując metodę [[yii\db\ActiveQuery::onCondition()|onCondition()]] w poniższy sposób: ```php // SELECT `customer`.* FROM `customer` @@ -1032,7 +1032,7 @@ $customers = Customer::find()->joinWith([ Powyższa kwerenda pobiera *wszystkich* klientów i dla każdego z nich pobiera wszystkie aktywne zamówienia. Zwróć uwagę na to, że ten przykład różni się od poprzedniego, gdzie pobierani byli tylko klienci posiadający przynajmniej jedno aktywne zamówienie. -> Info: Jeśli [[yii\db\ActiveQuery]] zawiera warunek podany za pomocą [[yii\db\ActiveQuery::onCondition()|onCondition()]], +> 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`. @@ -1221,8 +1221,8 @@ Możesz używać większości funkcjonalności dostępnych dla relacyjnych kwere ## Niestandardowe klasy kwerend -Domyślnie wszystkie kwerendy Active Record używają klasy [[yii\db\ActiveQuery]]. Aby użyć niestandardowej klasy kwerend razem z klasą Active Record, -należy nadpisać metodę [[yii\db\ActiveRecord::find()]], aby zwracała instancję żądanej klasy kwerend. Przykład: +Domyślnie wszystkie kwerendy Active Record używają klasy [[yii\db\ActiveQuery|ActiveQuery]]. Aby użyć niestandardowej klasy kwerend razem z klasą Active Record, +należy nadpisać metodę [[yii\db\ActiveRecord::find()|find()]], aby zwracała instancję żądanej klasy kwerend. Przykład: ```php namespace app\models; diff --git a/docs/guide-pl/glossary.md b/docs/guide-pl/glossary.md index 4d87ffe..c13765d 100644 --- a/docs/guide-pl/glossary.md +++ b/docs/guide-pl/glossary.md @@ -54,7 +54,8 @@ Dostawca jest organizacją lub indywidualnym deweloperem dostarczającym kod w f ## instalacja -Instalacja jest procesem przygotowania do działania, zarówno poprzez wykonanie instrukcji zawartych w pliku typu readme, jak i przez uruchomienie specjalnie do tego celu przygotowanego skryptu. W przypadku Yii dotyczy to ustawienia praw dostępu i spełnienia wymogów oprogramowania. +Instalacja jest procesem przygotowania do działania, zarówno poprzez wykonanie instrukcji zawartych w pliku typu readme, jak i przez uruchomienie specjalnie do tego celu +przygotowanego skryptu. W przypadku Yii dotyczy to ustawienia praw dostępu i spełnienia wymogów oprogramowania. ## installation @@ -74,7 +75,8 @@ Konfiguracja może odnosić się zarówno do procesu ustawiania właściwości o ## moduł -Moduł jest mini aplikacją zawierającą elementy MVC, takie jak modele, widoki, kontrolery itp., która może być używana wewnątrz głównej aplikacji, poprzez przekierowanie obsługi żądań do modułu zamiast standardowo do własnego kontrolera. +Moduł jest mini aplikacją zawierającą elementy MVC, takie jak modele, widoki, kontrolery itp., która może być używana wewnątrz głównej aplikacji, poprzez przekierowanie obsługi +żądań do modułu zamiast standardowo do własnego kontrolera. # N diff --git a/docs/guide-pl/helper-overview.md b/docs/guide-pl/helper-overview.md index d871adc..294ce23 100644 --- a/docs/guide-pl/helper-overview.md +++ b/docs/guide-pl/helper-overview.md @@ -16,8 +16,8 @@ echo Html::encode('Test > test'); ``` > Note: W celu zapewnienia możliwości [dostosowania klas pomocniczych do własnych potrzeb](#customizing-helper-classes), Yii rozdziela każdą z ich wbudowanych wersji - na dwie klasy: podstawę (np. `BaseArrayHelper`) i klasę właściwą (np. `ArrayHelper`). Kiedy chcesz użyć klasy pomocnicznej, powinieneś korzystać wyłącznie z jej właściwej wersji - i nigdy nie używać bezpośrednio podstawy. +> na dwie klasy: podstawę (np. `BaseArrayHelper`) i klasę właściwą (np. `ArrayHelper`). Kiedy chcesz użyć klasy pomocnicznej, powinieneś korzystać wyłącznie z jej właściwej wersji +> i nigdy nie używać bezpośrednio podstawy. Wbudowane klasy pomocnicze @@ -43,11 +43,11 @@ Poniższe wbudowane klasy pomocnicze dostępne są w każdym wydaniu Yii: Dostosowywanie klas pomocniczych do własnych potrzeb ---------------------------------------------------- -Aby zmodyfikować wbudowaną klasę pomocniczną (np. [[yii\helpers\ArrayHelper]]), należy stworzyć nową klasę rozszerzającą odpowiednią podstawę -(np. [[yii\helpers\BaseArrayHelper]]) i nazwać ją identycznie jak jej wersja właściwa (np. [[yii\helpers\ArrayHelper]]), łącznie z zachowaniem jej przestrzeni nazw. -Ta klasa może następnie zostać użyta do zastąpienia oryginalnej implementacji we frameworku. +Aby zmodyfikować wbudowaną klasę pomocniczną (np. [[yii\helpers\ArrayHelper|ArrayHelper]]), należy stworzyć nową klasę rozszerzającą odpowiednią podstawę +(np. [[yii\helpers\BaseArrayHelper|BaseArrayHelper]]) i nazwać ją identycznie jak jej wersja właściwa (np. [[yii\helpers\ArrayHelper|ArrayHelper]]), łącznie z zachowaniem jej +przestrzeni nazw. Ta klasa może następnie zostać użyta do zastąpienia oryginalnej implementacji we frameworku. -Poniższy przykład ilustruje w jaki sposób zmodyfikować metodę [[yii\helpers\ArrayHelper::merge()|merge()]] klasy [[yii\helpers\ArrayHelper]]: +Poniższy przykład ilustruje w jaki sposób zmodyfikować metodę [[yii\helpers\ArrayHelper::merge()|merge()]] klasy [[yii\helpers\ArrayHelper|ArrayHelper]]: ```php @@ -43,14 +43,15 @@ class UploadForm extends Model ``` W powyższym kodzie, atrybut `imageFile` zostanie użyty do przechowania instancji przesłanego pliku. Jest połączony z zasadą walidacji `file`, która korzysta z -walidatora [[yii\validators\FileValidator]], aby upewnić się, że przesłany plik posiada rozszerzenie `png` lub `jpg`. +walidatora [[yii\validators\FileValidator|FileValidator]], aby upewnić się, że przesłany plik posiada rozszerzenie `png` lub `jpg`. Metoda `upload()` wywoła walidację oraz zapis przesłanego pliku na serwerze. Walidator `file` pozwala na sprawdzenie rozszerzenia, wielkości, typu MIME, itp. Po więcej szczegółów zajrzyj do sekcji [Podstawowe walidatory](tutorial-core-validators.md#file) > Tip: Jeśli przesyłasz obrazek, możesz rozważyć użycie walidatora `image`. - Walidator ten jest implementowany przez [[yii\validators\ImageValidator]], który weryfikuje czy atrybut otrzymał prawidłowy obrazek który może być zapisany i przetworzony przez [rozszerzenie Imagine](https://github.com/yiisoft/yii2-imagine). +> Walidator ten jest implementowany przez [[yii\validators\ImageValidator|ImageValidator]], który weryfikuje czy atrybut otrzymał prawidłowy obrazek który może być +> zapisany i przetworzony przez [rozszerzenie Imagine](https://github.com/yiisoft/yii2-imagine). ## Renderowanie pola wyboru pliku @@ -104,12 +105,12 @@ class SiteController extends Controller } ``` -W powyższym kodzie, kiedy formularz jest wysłany, metoda [[yii\web\UploadedFile::getInstance()]] wywoływana jest do reprezentowania pliku jako instancji `UploadedFile`. +W powyższym kodzie, kiedy formularz jest wysłany, metoda [[yii\web\UploadedFile::getInstance()|getInstance()]] wywoływana jest do reprezentowania pliku jako instancji `UploadedFile`. Następnie przystępujemy do walidacji modelu, aby upewnić się, że przesłany plik jest prawidłowy, po czym zapisujemy go na serwerze. ## Przesyłanie wielu plików -Możesz przesyłać wiele plików za jednym razem modyfikując odrobinę kod wylistowany w powyższych sekcjach. +Możesz przesyłać wiele plików za jednym razem, modyfikując odrobinę kod wylistowany w powyższych sekcjach. Najpierw powinieneś dostosować klasę modelu dodając opcję `maxFiles` do zasady walidacji `file`, aby określić dozwoloną maksymalną liczbę przesyłanych plików. Metoda `upload()` powinna również zostać zaktualizowana, aby zapisywać pliki jeden po drugim. @@ -164,7 +165,8 @@ use yii\widgets\ActiveForm; ``` -Na koniec, w akcji kontrolera musimy zmienić wywołanie `UploadedFile::getInstance()` na `UploadedFile::getInstances()`, aby przypisać tablicę instancji `UploadedFile` do `UploadForm::imageFiles`. +Na koniec, w akcji kontrolera musimy zmienić wywołanie `UploadedFile::getInstance()` na `UploadedFile::getInstances()`, aby przypisać tablicę instancji `UploadedFile` +do `UploadForm::imageFiles`. ```php namespace app\controllers; diff --git a/docs/guide-pl/input-forms.md b/docs/guide-pl/input-forms.md index 15792b0..aa67440 100644 --- a/docs/guide-pl/input-forms.md +++ b/docs/guide-pl/input-forms.md @@ -1,13 +1,14 @@ Tworzenie formularzy ============== -Podstawowym sposobem korzystania z formularzy w Yii jest użycie [[yii\widgets\ActiveForm]]. Ten sposób powinien być używany, jeśli formularz jest bazowany na modelu. -Dodatkowo, [[yii\helpers\Html]] zawiera sporo użytecznych metod, które zazwyczaj używane są do dodawania przycisków i tekstów pomocniczych do każdego formularza. +Podstawowym sposobem korzystania z formularzy w Yii jest użycie [[yii\widgets\ActiveForm|ActiveForm]]. Ten sposób powinien być używany, jeśli formularz jest bazowany na modelu. +Dodatkowo, klasa [[yii\helpers\Html|Html]] zawiera sporo użytecznych metod, które zazwyczaj używane są do dodawania przycisków i tekstów pomocniczych do każdego formularza. -Formularz, który jest wyświetlany po stronie klienta, w większości przypadków, posiada odpowiedni [model](structure-models.md), który jest używany do walidacji danych wejściowych po stronie serwera. -(Sprawdź sekcję [Walidacja danych wejściowych](input-validation.md) aby uzyskać więcej szczegółów). +Formularz, który jest wyświetlany po stronie klienta, w większości przypadków, posiada odpowiedni [model](structure-models.md), który jest używany do walidacji danych wejściowych po +stronie serwera (sprawdź sekcję [Walidacja danych wejściowych](input-validation.md) aby uzyskać więcej szczegółów). Podczas tworzenia formularza na podstawie modelu, pierwszym krokiem jest zdefiniowanie samego modelu. -Model może być bazowany na klasie [Active Record](db-active-record.md), reprezentując dane z bazy danych, lub może być też bazowany na klasie generycznej Model ([[yii\base\Model]]) aby przechwytywać dowolne dane wejściowe, np. formularz logowania. +Model może być bazowany na klasie [Active Record](db-active-record.md), reprezentując dane z bazy danych, lub może być też bazowany na klasie generycznej [[yii\base\Model|Model]], +aby przechwytywać dowolne dane wejściowe, np. formularz logowania. W poniższym przykładzie pokażemy, jak model generyczny może być użyty do formularza logowania: ```php @@ -49,14 +50,15 @@ $form = ActiveForm::begin([ ``` -W powyższym kodzie, [[yii\widgets\ActiveForm::begin()|ActiveForm::begin()]] nie tylko tworzy instancję formularza, ale zaznacza też jego początek. -Cała zawartość położona pomiędzy [[yii\widgets\ActiveForm::begin()|ActiveForm::begin()]] i [[yii\widgets\ActiveForm::end()|ActiveForm::end()]] zostanie otoczona tagiem HTML'owym `
`. -Jak w każdym widżecie, możesz sprecyzować kilka opcji jak widżet powinien być skonfigurowany przez przekazanie tablicy do metody `begin`. +W powyższym kodzie, [[yii\widgets\ActiveForm::begin()|begin()]] nie tylko tworzy instancję formularza, ale zaznacza też jego początek. +Cała zawartość położona pomiędzy [[yii\widgets\ActiveForm::begin()|begin()]] i [[yii\widgets\ActiveForm::end()|end()]] zostanie otoczona tagiem HTML'owym ``. +Jak w przypadku każdego widżetu, możesz określić kilka opcji z jakimi widżet powinien być skonfigurowany przez przekazanie tablicy do metody `begin`. W tym przypadku dodatkowa klasa CSS i identyfikator ID zostały przekazane do otwierającego tagu ``. -Aby zobaczyć wszystkie dostępne opcje, zajrzyj do dokumentacji API [[yii\widgets\ActiveForm]]. +Aby zobaczyć wszystkie dostępne opcje, zajrzyj do dokumentacji API [[yii\widgets\ActiveForm|ActiveForm]]. -Do utworzenia formularza, wraz z elementami etykiet oraz wszelkimi walidacjami JavaScript, wywoływana jest metoda [[yii\widgets\ActiveForm::field()|ActiveForm::field()]], która zwraca instancję obiektu [[yii\widgets\ActiveField]]. -Kiedy rezultat tej metody jest bezpośrednio wyświetlany, będzie on regularnym polem tekstowym. +Do utworzenia formularza, wraz z elementami etykiet oraz wszelkimi walidacjami JavaScript, wywoływana jest metoda [[yii\widgets\ActiveForm::field()|field()]], która zwraca instancję +obiektu [[yii\widgets\ActiveField|ActiveField]]. +Kiedy rezultat tej metody jest bezpośrednio wyświetlany, tworzone jest regularne pole tekstowe. Aby dostosować pola, możesz używać dodatkowych metod łączonych [[yii\widgets\ActiveField|ActiveField]]: ```php @@ -68,13 +70,14 @@ Aby dostosować pola, możesz używać dodatkowych metod łączonych [[yii\widge field($model, 'email')->input('email') ?> ``` -Powyższy kod utworzy tagi `