アクションコントローラー

はじめに

チュートリアル2で記載されいる内容とほとんど同じとなりますが、 この項目では、アクションコントローラーについて、記載します。

クラスリファレンス/ActionControllerも参考にして下さい。

ルーティング

Envi PHPは、まず、{action_name}.class.phpが存在することを確認し、存在しないなら、 actions.class.phpに、execute{action_name(パスカルケース)}が存在するかどうかを確認します。 たとえば、action_nameがindexの場合は、executeIndexを参照します。

どちらも無い場合は、Envi404Exceptionを発行し、終了します。

actions.class.phpが利用される場合、

execute{action_name}以外の、アクションコントローラー定義も、{action_name}をつけて定義する必要があります。

定義されていない場合、デフォルトの処理が適応されます。 たとえば、initialize{action_name}が定義されていない場合、単にinitializeが実行されます。

警告: ActionChainの機能や、 EnviController::forwardを使用して、Actionを再利用する場合は、スケルトンを使用せず、actions.class.phpにまとめて処理を記述する必要があります。 そうで無いなら、EnviMVCは同名クラスの作成を試みます

コマンドラインによる作成

初期化された、アクションコントローラーは、下記のコマンドで作成することが出来ます。

envi init-action <app_key> <module_name> <action_name>

それぞれのメソッドの役割

アクションコントローラーのスケルトンは、たとえば下記のようになっています。


<?php
class indexAction extends helloActions
{

    public function 
initialize()
    {
        return 
true;
    }


    public function 
shutdown()
    {
        return 
true;
    }


    public function 
validate()
    {
        
$validator validator();

        
$res $validator->executeAll();
        if (
$validator->isError($res)) {
            return 
false;
        }
        return 
true;
    }


    public function 
execute()
    {
        return 
Envi::SUCCESS;
    }


    public function 
defaultAccess()
    {
        return 
Envi::DEFAULT_ACCESS;
    }


    public function 
handleError()
    {
        return 
Envi::ERROR;
    }


    public function 
isSecure()
    {
        return 
false;
    }

    public function 
isPrivate()
    {
        return 
false;
    }


    public function 
isSSL()
    {
        return 
false;
    }

}
メソッド名 説明
isSecure User::isLogin()がtrueの場合のみ実行するかどうか。
return true;で、User::isLogin()の判定を行う。
isPrivate Controller::forward()かアクションチェインでのみ実行されるアクションかどうか。
return true;の場合、制限がかかる
isSSL SSLでのアクセスのみ実行されるアクションかどうか。
return true;の場合、制限がかかる
initialize 初期化処理。実行できるかどうかの判定のあと、最初に実行される。
falseを返すと、そこでそのアクションは処理を終了しビューも実行されない。
validate アクションクラスの中にあるこのメソッドでは、フォームの値の検証 (Validation) や、フォームの準備をする役割があります。
返り値によって、その後、executedefaultAccesshandleErrorのどれかが実行されます。
execute validate で true もしくは、Envi::SUCCESSが返った場合
defaultAccess validate で Envi::DEFAULT_ACCESSが返った場合
handleError validate で false もしくは、Envi::ERRORが返った場合
shutdown 終了処理。Viewに移る前に実行される。
falseを返すと、そこでそのアクションは処理を終了しビューも実行されない。

ActionController から直接レンダラーを実行する

多くのWebアプリケーションにおいて、Viewを必要とする事は少ないかもしれません。

そういった場合、空のViewを作成することは、無駄なオーバーヘッドを引き起こすだけに過ぎないかもしれません。

ActionControllerから、直接Rendererをコールすることを望むなら、ActionController内で、 $this->Renderer()を使用することで、ActionControllerからRendererを呼び出すことが出来ます。 executedefaultAccesshandleErrorの返り値は、Envi::NONEを返すか、単にvoidメソッドにして下さい。 そうすることで、viewの実行が省略されます。

注意:viewの実行が省略されても、出力フィルタは実行されることに注意して下さい。