Yii-액션 사용

컨트롤러 클래스에서 액션을 생성하려면 이름이 action이라는 단어로 시작하는 퍼블릭 메서드를 정의해야합니다. 작업의 반환 데이터는 최종 사용자에게 보낼 응답을 나타냅니다.

Step 1 − hello-world 액션을 정의하겠습니다. 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 − 유형 http://localhost:8080/index.php?r=example/hello-world웹 브라우저의 주소 표시 줄에서. 다음이 표시됩니다.

작업 ID는 일반적으로 만들기, 업데이트, 삭제 등과 같은 동사입니다. 이는 작업이 리소스 인 경우 특정 변경을 수행하도록 설계되는 경우가 많기 때문입니다.

액션 ID는 소문자, 숫자, 하이픈, 밑줄 등의 문자 만 포함해야합니다.

액션에는 인라인과 독립형의 두 가지 유형이 있습니다.

인라인 작업은 컨트롤러 클래스에서 정의됩니다. 액션의 이름은 이런 식으로 액션 ID에서 파생됩니다.

  • 작업 ID의 모든 단어에서 첫 글자를 대문자로 바꿉니다.
  • 하이픈을 제거하십시오.
  • 작업 접두사를 추가합니다.

Examples

  • index는 actionIndex가됩니다.
  • hello-world (위의 예에서와 같이)는 actionHelloWorld가됩니다.

다른 위치에서 동일한 작업을 재사용하려는 경우 독립 실행 형 작업으로 정의해야합니다.

독립 실행 형 작업 클래스 만들기

독립 실행 형 액션 클래스를 생성하려면 yii \ base \ Action 또는 자식 클래스를 확장하고 run() 방법.

Step 1− 프로젝트 루트 내에 컴포넌트 폴더를 생성합니다. 그 폴더 안에GreetingAction.php 다음 코드로.

<?php 
   namespace app\components;
   use yii\base\Action;
   class GreetingAction extends Action {
      public function run() {
         return "Greeting";
      }
   }
?>

재사용 가능한 작업을 방금 만들었습니다. 우리에서 사용하려면ExampleController, action () 메서드를 재정 의하여 액션 맵에서 액션을 선언해야합니다.

Step 2 − 수정 ExampleController.php 이 방법으로 파일을 작성하십시오.

<?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!";
      }
   }
?>

그만큼 actions() 메서드는 값이 클래스 이름이고 키가 작업 ID 인 배열을 반환합니다.

Step 3 − 이동 http://localhost:8080/index.php?r=example/greeting. 다음 출력이 표시됩니다.

Step 4− 액션을 사용하여 사용자를 다른 URL로 리디렉션 할 수도 있습니다. 다음 작업을ExampleController.php.

public function actionOpenGoogle() {
   // redirect the user browser to http://google.com
   return $this->redirect('http://google.com');
}

자, 열면 http://localhost:8080/index.php?r=example/open-google, 다음으로 리디렉션됩니다. http://google.com.

조치 메소드는 조치 매개 변수 라는 매개 변수를 사용할 수 있습니다 . 해당 값은 다음에서 검색됩니다.$_GET 매개 변수 이름을 키로 사용합니다.

Step 5 − 예제 컨트롤러에 다음 작업을 추가합니다.

public function actionTestParams($first, $second) {
   return "$first $second";
}

Step 6 − URL 입력 http://localhost:8080/index.php?r=example/testparams&first=hello&second=world 웹 브라우저의 주소 표시 줄에 다음 출력이 표시됩니다.

각 컨트롤러에는 기본 동작이 있습니다. 경로에 컨트롤러 ID 만 포함 된 경우 기본 작업이 요청됨을 의미합니다. 기본적으로 작업은index. 컨트롤러에서이 속성을 쉽게 재정의 할 수 있습니다.

Step 7 − 수정 ExampleController 이 방법.

<?php
   namespace app\controllers;
   use yii\web\Controller;
   class ExampleController extends Controller {
      public $defaultAction = "hello-world";
      /* other actions */
   }
?>

Step 8 − 이제 다음으로 이동하면 http://localhost:8080/index.php?r=example, 다음이 표시됩니다.

요청을 수행하기 위해 컨트롤러는 다음 수명주기를 거칩니다.

  • yii \ base \ Controller :init() 메서드가 호출됩니다.

  • 컨트롤러는 작업 ID를 기반으로 작업을 만듭니다.

  • 컨트롤러는 순차적으로 beforeAction() 웹 애플리케이션, 모듈 및 컨트롤러의 방법.

  • 컨트롤러가 작업을 실행합니다.

  • 컨트롤러는 순차적으로 afterAction() 웹 애플리케이션, 모듈 및 컨트롤러의 방법.

  • 애플리케이션은 응답에 조치 결과를 할당합니다.

중요 사항

컨트롤러는-

  • 매우 얇습니다. 각 작업에는 몇 줄의 코드 만 포함되어야합니다.
  • 응답을 위해보기를 사용하십시오.
  • HTML을 포함하지 마십시오.
  • 요청 데이터에 액세스하십시오.
  • 모델의 호출 방법.
  • 요청 데이터를 처리하지 않습니다. 이들은 모델에서 처리되어야합니다.