Прерывание потока контроллера FuelPHP REST и отклик дисплея
Я использую контроллер отдыха FuelPHP.
Я пытаюсь прервать поток и отобразить свой ответ после ошибки.
Вот мой основной поток необходим:
- Когда любой из методов вызывается, я запускаю функцию "validate", которая проверяет параметры и другую бизнес-логику.
- Если функция "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 для класса ответа.