1

FuelPHP の rest コントローラーを使用しています。

エラーが発生した後、フローを中断して応答を表示しようとしています。

必要な私の基本的なフローは次のとおりです。

  1. いずれかのメソッドが呼び出されると、パラメーターやその他のビジネス ロジックを検証する「検証」関数を実行します。
  2. 「検証」機能で何かがおかしいと判断された場合は、スクリプト全体を停止して、これまでに準拠したエラーを表示したいと考えています。

「検証」関数で次のことを試しましたが、検証関数を終了するだけです...その後、要求されている最初のメソッドに進みます。スクリプトをすぐに停止して、この応答の内容を表示するにはどうすればよいですか?

return $this->response( array(
        'error_count' => 2,
        'error' => $this->data['errors'] //an array of error messages/codes
    ) );
4

2 に答える 2

2

それは非常に悪い習慣です。終了すると、現在のコントローラーだけでなく、残りのフレームワーク フローも中止されます。

アクションで検証するだけです:

// do your validation, set a response and return if it failed
if ( ! $valid)
{
    $this->response( array(
        'error_count' => 2,
        'error' => $this->data['errors'] //an array of error messages/codes
    ), 400); //400 is an HTTP status code
    return;
}

または、(コントローラー アクションではなく) 中央検証を行いたい場合は、router() メソッドを使用します。

public function router($resource, $arguments)
{
    if ($this->valid_request($resource))
    {
        return parent::router($resource, $arguments);
    }
}

protected function valid_request($resource)
{
    // do your validation here, $resource tells you what was called
    // set $this->response like above if validation failed, and return false
    // if valid, return true
}
于 2013-08-31T23:17:17.510 に答える
0

私は FuelPHP を初めて使用するので、この方法が悪い方法である場合はお知らせください。

要求されたメソッドが何かを返すとき以外の時点で REST コントローラーがフローを中断するようにする場合は、このコードを使用します。$this->response 配列を変更して、必要なものを返すことができます。スクリプトの主要部分は $this->response->send() メソッドと exit メソッドです。

    $this->response( array(
        'error_count' => 2,
        'error' => $this->data['errors'] //an array of error messages/codes
    ), 400); //400 is an HTTP status code

    //The send method sends the response body to the output buffer (i.e. it is echo'd out).
    //pass it TRUE to send any defined HTTP headers before sending the response body.

    $this->response->send(true);

    //kill the entire script so nothing is processed past this point.
    exit;

send メソッドの詳細については、応答クラスの FuelPHP ドキュメントを参照してください。

于 2013-08-04T18:52:12.933 に答える