#php #laravel
#php #laravel
Вопрос:
Я расширил класс своим собственным, и если я нажму на метод responsNotFound (который я, безусловно, нажимаю, потому что, т.е. dd () работает, если я напишу его в ApiController), он ничего не вернет. Он просто каким-то образом пропускает return из responsNotFound и переходит к приведенному ниже оператору возврата if со всеми нулевыми значениями для всех данных, которые предоставляются с помощью json (что на самом деле является нормальным случаем, но эта строка никогда не должна выполняться).
class LessonsController extends ApiController{
...some other methods here...
public function show($id)
{
$lesson = Lesson::find($id);
if (! $lesson) {
$this->respondNotFound('Lesson does not exist');
}
return Response::json([
'data' => $this->lessonTransformer->transform($lesson),
], 200);
}
и ApiController выглядит как:
use IlluminateSupportFacadesResponse;
class ApiController extends Controller{
protected $statusCode = 404;
public function getStatusCode()
{
return $this->statusCode;
}
public function setStatusCode($statusCode)
{
$this->statusCode = $statusCode;
}
public function respondNotFound($message = 'Not Found')
{
return Response::json([
'error' => [
'message' => $message,
'status_code' => $this->getStatusCode()
]
]);
}}
Я также пытался вызвать getter для StatusCode в LessonController, но то же самое, он просто не реагирует на return. Но, как я упоминал выше, если я умру и сброшу что-либо в ApiController, все в порядке, все работает так, как должно, поэтому, если я добавлю этот ответ ::json… Я получаю это на переднем плане.
У кого-нибудь уже была эта проблема или какие-либо идеи, что может быть причиной?
Комментарии:
1. Вам нужно поставить
return
перед$this->respondNotFound('Lesson does not exist');
в вашемshow()
методе.2. возврат отсутствует в блоке if
Ответ №1:
Я думаю, что ваша проблема заключается в логическом блоке. Попробуйте следующее:
if (!$lesson){
return $this->respondNotFound('Lesson does not exist');
}
Вы должны остановить скрипт с помощью ключевого слова return в блоке if, иначе скрипт в LessonsController продолжит выполняться даже после вызова responsNotFound().
Комментарии:
1. Аааа … не могу поверить, что я потерял столько времени на это 🙂 Спасибо всем вам
2. Все в порядке, теперь вы узнали кое-что важное 🙂 Рад, что смог помочь!
Ответ №2:
Вероятно, вам просто нужно добавить return
перед вашим $this->respondNotFound('Lesson does not exist');
, и все будет работать