中断FuelPHP REST控制器流程和显示响应

时间:2013-08-04 03:35:13

标签: fuelphp fuelphp-routing

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

我正在尝试打破流程并在遇到错误后显示我的响应。

这是我需要的基本流程:

  1. 当调用任何方法时,我运行“验证”功能,该功能验证参数和其他业务逻辑。
  2. 如果“验证”功能确定某些内容已关闭,我想停止整个脚本并显示我到目前为止所遵循的错误。
  3. 我在“验证”功能中尝试过以下操作,但它只是退出验证功能...然后继续执行请求的初始方法。如何立即停止脚本并显示此响应的内容?

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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

我是FuelPHP的新手,所以如果这种方法不好,请告诉我。

如果您希望REST控制器在某个其他位置中断流,而不是在请求的方法返回某些内容时,请使用此代码。您可以更改$ this->响应数组以返回您想要的任何内容。该脚本的主要部分是$ 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 documentation for the response class.