Yii - Używanie akcji
Aby utworzyć akcję w klasie kontrolera, należy zdefiniować metodę publiczną, której nazwa zaczyna się od słowa action. Zwracane dane akcji reprezentują odpowiedź, która ma zostać wysłana do użytkownika końcowego.
Step 1 - Zdefiniujmy w naszym hello-world akcję ExampleController.
<?php
namespace app\controllers;
use yii\web\Controller;
class ExampleController extends Controller {
public function actionIndex() {
$message = "index action of the ExampleController"; return $this->render("example",[
'message' => $message
]);
}
public function actionHelloWorld() {
return "Hello world!";
}
}
?>
Step 2 - Typ http://localhost:8080/index.php?r=example/hello-worldw pasku adresu przeglądarki internetowej. Zobaczysz następujące.
![](https://post.nghiatu.com/assets/tutorial/yii/images/hello_world_action.jpg)
Identyfikatory akcji to zwykle czasowniki, takie jak tworzenie, aktualizowanie, usuwanie i tak dalej. Dzieje się tak, ponieważ akcje są często zaprojektowane w celu wykonania określonej zmiany zasobu.
Identyfikatory działań powinny zawierać tylko te znaki - angielskie litery małymi literami, cyfry, łączniki i podkreślenia.
Istnieją dwa typy akcji: wbudowane i samodzielne.
Akcje wbudowane są zdefiniowane w klasie kontrolera. Nazwy akcji są wyprowadzane z identyfikatorów akcji w ten sposób -
- Zamień pierwszą literę wszystkich słów identyfikatora akcji na wielką.
- Usuń łączniki.
- Dodaj prefiks akcji.
Examples -
- index staje się actionIndex.
- hello-world (jak w powyższym przykładzie) staje się actionHelloWorld.
Jeśli planujesz ponownie użyć tej samej akcji w różnych miejscach, powinieneś zdefiniować ją jako samodzielną akcję.
Utwórz samodzielną klasę akcji
Aby stworzyć samodzielną klasę akcji, powinieneś rozszerzyć yii \ base \ Action lub klasę potomną i zaimplementować klasę run() metoda.
Step 1- Utwórz folder komponentów w katalogu głównym projektu. Wewnątrz tego folderu utwórz plik o nazwieGreetingAction.php z następującym kodem.
<?php
namespace app\components;
use yii\base\Action;
class GreetingAction extends Action {
public function run() {
return "Greeting";
}
}
?>
Właśnie stworzyliśmy akcję wielokrotnego użytku. Aby użyć go w naszymExampleController, powinniśmy zadeklarować naszą akcję na mapie akcji, zastępując metodę actions ().
Step 2 - Zmodyfikuj plik ExampleController.php plik w ten sposób.
<?php
namespace app\controllers;
use yii\web\Controller;
class ExampleController extends Controller {
public function actions() {
return [
'greeting' => 'app\components\GreetingAction',
];
}
public function actionIndex() {
$message = "index action of the ExampleController";
return $this->render("example",[ 'message' => $message
]);
}
public function actionHelloWorld() {
return "Hello world!";
}
}
?>
Plik actions() metoda zwraca tablicę, której wartościami są nazwy klas, a klucze są identyfikatorami akcji.
Step 3 - Idź do http://localhost:8080/index.php?r=example/greeting. Zobaczysz następujące dane wyjściowe.
![](https://post.nghiatu.com/assets/tutorial/yii/images/greeting_example.jpg)
Step 4- Możesz także użyć akcji, aby przekierować użytkowników do innych adresów URL. Dodaj następującą akcję doExampleController.php.
public function actionOpenGoogle() {
// redirect the user browser to http://google.com
return $this->redirect('http://google.com');
}
Teraz, jeśli otworzysz http://localhost:8080/index.php?r=example/open-google, zostaniesz przekierowany do http://google.com.
Metody akcji mogą przyjmować parametry zwane parametrami akcji . Ich wartości są pobierane z$_GET używając nazwy parametru jako klucza.
Step 5 - Dodaj następującą akcję do naszego przykładowego kontrolera.
public function actionTestParams($first, $second) {
return "$first $second";
}
Step 6 - Wpisz adres URL http://localhost:8080/index.php?r=example/testparams&first=hello&second=world w pasku adresu przeglądarki internetowej zobaczysz następujące dane wyjściowe.
![](https://post.nghiatu.com/assets/tutorial/yii/images/run_hello_world_example.jpg)
Każdy kontroler ma domyślną akcję. Gdy trasa zawiera tylko identyfikator kontrolera, oznacza to, że żądana jest akcja domyślna. Domyślnie akcją jestindex. Możesz łatwo nadpisać tę właściwość w kontrolerze.
Step 7 - Zmodyfikuj nasze ExampleController tą drogą.
<?php
namespace app\controllers;
use yii\web\Controller;
class ExampleController extends Controller {
public $defaultAction = "hello-world";
/* other actions */
}
?>
Step 8 - Teraz, jeśli pójdziesz do http://localhost:8080/index.php?r=examplezobaczysz, co następuje.
![](https://post.nghiatu.com/assets/tutorial/yii/images/run_hello_world_example1.jpg)
Aby spełnić żądanie, administrator przejdzie przez następujący cykl życia -
Kontroler yii \ base \:init() wywoływana jest metoda.
Kontroler tworzy akcję na podstawie identyfikatora akcji.
Kontroler sekwencyjnie wywołuje beforeAction() metoda aplikacji internetowej, modułu i kontrolera.
Kontroler uruchamia akcję.
Kontroler sekwencyjnie wywołuje afterAction() metoda aplikacji internetowej, modułu i kontrolera.
Aplikacja przypisuje wynik akcji do odpowiedzi.
Ważne punkty
Administratorzy powinni:
- Bądź bardzo chudy. Każda akcja powinna zawierać tylko kilka wierszy kodu.
- Użyj widoków do odpowiedzi.
- Nie osadzaj kodu HTML.
- Uzyskaj dostęp do danych żądania.
- Metody wywoływania modeli.
- Nie przetwarzamy żądanych danych. Powinny zostać przetworzone w modelu.