Прерывание потока контроллера FuelPHP REST и отклик дисплея

Я использую контроллер отдыха FuelPHP.

Я пытаюсь прервать поток и отобразить свой ответ после ошибки.

Вот мой основной поток необходим:

  1. Когда любой из методов вызывается, я запускаю функцию "validate", которая проверяет параметры и другую бизнес-логику.
  2. Если функция "validate" определяет, что что-то отключено, я хочу остановить весь скрипт и отобразить ошибки, которые я выполнил до сих пор.

Я попробовал следующее в моей функции "validate", но она просто выходит из функции validate... затем переходит к начальному запрашиваемому методу. Как мне немедленно остановить скрипт и отобразить содержимое этого ответа?

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

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
}

Я новичок в 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;

Для получения дополнительной информации о методе отправки ознакомьтесь с документацией FuelPHP для класса ответа.

Другие вопросы по тегам