1

我正在使用 FuelPHP 的休息控制器。

遇到错误后,我试图中断流程并显示我的响应。

这是我需要的基本流程:

  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 回答