Praca z formularzami ================== Ta sekcja opisuje jak utworzyć nową stronę z formularzem pobierającym dane od użytkownika. Strona będzie wyświetlała formularz z polami dwoma polami do uzupełnienia: `nazwa` oraz `email`. Po otrzymaniu tych dwóch danych od użytkownika, wyświetlimy spowrotem wprowadzone wartości w celu ich potwierdzenia. Aby to osiągnąć, oprócz utworzenia [akcji](structure-controllers.md) i dwóch [widoków](structure-views.md), będziesz musiał utworzyć [model](structure-models.md). W tym poradniku nauczysz się jak: * utworzyć [model](structure-models.md) reprezentujący dane wprowadzone przez użytkownika przez formularz, * zadeklarować zasady do sprawdzenia wprowadzonych danych, * zbudować formularz HTML w [widoku](structure-views.md). * build an HTML form in a [view](structure-views.md). Tworzenie modelu ---------------- Dane które pobierzemy od użytkownika będą reprezentowane przez klasę modelu `EntryForm`, która pokazana jest poniżej. Jest ona zapisana w pliku `models/EntryForm.php`. Po więcej szczegółów odnośnie konwencji nazewnictwa plików zajrzyj do sekcji[autoładowania klas](concept-autoloading.md) ```php Info: [[yii\base\Model]] jest używane jako rodzic dla klasy modeli *NIE* powiązanych z tabelą bazy danych. [[yii\db\ActiveRecord]] jest rodzicem dla klas modeli powiązanych z tabelami bazy danych. Klasa `EntryForm` zawiera dwa elementy publiczne, `name` oraz `email`, które są używane do przechowania danych wprowadzonych przez użytkownika. Zawieta również metodą nazwaną `rules()`, która zwraca zestaw zasad do walidacji wprowadzonych danych. Zadeklarowane zasady oznaczają: * wartości w polach `name` oraz `email są wymagane * wartość pola `email` musi być prawidłowym adresem email Jeśli posiadasz uzupełniony obiekt `EntryForm` danymi wprowadzonymi przez użytkownika, możesz wywołać jego funkcję [[yii\base\Model::validate()|validate()]], aby uruchomić procedurę sprawdzania poprawności danych. W przypadku wystąpienia błędów w walidacji, wartość [[yii\base\Model::hasErrors|hasErrors]] zostanie ustawiona na `true`. Możesz zobaczyć jakie błędy wystąpiły za pomocą metody [[yii\base\Model::getErrors|errors]]. ```php name = 'Qiang'; $model->email = 'bad'; if ($model->validate()) { // Dobrze! } else { // Źle! // Use $model->getErrors() } ``` Tworzenie akcji ------------------ Następnie musisz utworzyć akcję o nazwie `entry` w kontrolerze `site`, która użyje Twojego nowego modelu. Proces tworzenia i używania akcji był wytłumaczony w sekcji [Witaj świecie](start-hello.md) ```php load(Yii::$app->request->post()) && $model->validate()) { // walidacja otrzymanych danych w modelu // zrób coś sensownego z modelem return $this->render('entry-confirm', ['model' => $model]); } else { // w przypadku błędów walidacji wyświetlana jest strona z błędami return $this->render('entry', ['model' => $model]); } } } ``` Akcja tworzy na początku obiekt `EntryForm`. Następnie próbuje uzupełnić model danymi ze zmiennej `$_POST`, dostarczanymi w Yii przez metodę [[yii\web\Request::post()]]. Jeśli model został prawidłowo uzupełniony(np. jeśli użytkownik wysłał formularz HTML), akcja wywoła metodę [[yii\base\Model::validate()|validate()]] aby upewnić się, że wprowadzone dane są prawidłowe. > Info: Wyrażenie `Yii::$app` reprezentuje instancję [aplikacji](structure-applications.md), która jest globalnie dostępnym singletonem. Jest również [lokatorem usług](concept-service-locator.md), który dostarcza komponenty takie jak `request`, `response` lub `db` do wsparcia specyficznej funkcjonalności. W powyższym kodzie użyty jest komponent `request` aby uzyskać dostęp do danych w zmiennej `$_POST`. Jeśli wszystko jest w porządku, akcja wyrenderuje widok o nazwie `entry-confirm` w celu potwierdzenia prawidłowego przesłania danych przez użytkownika. Jeśli nie zostały wysłane żadne dane lub dane zawierają błędy, zostanie wyrenderowany widok `entry`, w którym będzie pokazany formularz HTML wraz z wiadomościami błędów walidacji. > Note: W tym prostym przykładzie po prostu renderujemy stronę z potwierdzeniem prawidłowego przesłania danych. W praktyce powinieneś rozważyć użycie [[yii\web\Controller::refresh()|refresh()]] lub [[yii\web\Controller::redirect()|redirect()]] aby uniknąć [problemów z ponownym przesłaniem formularza](http://en.wikipedia.org/wiki/Post/Redirect/Get). Tworzenie widoku -------------- Na koniec, utwórz dwa pliki o nazwach `entry-confirm` oraz `entry`. Będą one renderowane przez akcję `entry`, tak jak to przed chwilą opisaliśmy. Widok `entry-confirm` wyświelta po prostu dane `name` oraz `email`. Powinien być zapisany w pliku `views/site/entry-confirm.php`. ```php
Wpisałeś następujące informacje: