Какой-либо метод расширения класса ничего не вернет?

#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'); , и все будет работать