Почему атрибут пуст в этом случае? - PullRequest
2 голосов
/ 24 апреля 2020

У меня есть объект шутки в классе, и атрибут этого устанавливается в действии getJokes. Если я дам его, я увижу ожидаемые данные, однако, когда мне нужны данные в действии showJokes, объект пуст. Почему?

namespace App\Http\Controllers;
use App\Services\JokeApiService;
use App\Store\JokeStore;
use Illuminate\Http\Request;


class JokeController extends Controller
{
    private $_jokeApiService;
    private $_jokes;

    public function __construct(JokeApiService $jokeApiService, JokeStore $jokes)
    {
        $this->_jokeApiService = $jokeApiService;
        $this->_jokes = $jokes;
    }

    public function index()
    {
        return view("index");
    }

    public function showJokes()
    {

        //The object null here
        dd($this->_jokes->getJokes());

        return view("showJokes")->with("jokes", $this->_jokes->getJokes());
    }

    public function getJokes(Request $request)
    {
        $request->validate([
            'number_of_jokes' => 'required|integer|between:1,20',
        ]);

        $result = $this->_jokeApiService->LoadJokes();

        $this->_jokes->setJokes($result);

        //The object has tha data expected
        //dd($this->_jokes->getJokes());

        return redirect()->action("JokeController@showJokes");
    }
}

1 Ответ

1 голос
/ 24 апреля 2020

Я думаю, что вы делаете это, чтобы не вызывать вашу базу данных несколько раз. (но это не очень хорошая идея, если то, что я предполагаю, является правдой, подумайте о наличии миллиона шуток, хотите ли вы загрузить все это в свой атрибут шуток?).

В процессе request -> response, у вас есть разные экземпляры JokeController.

Это означает, что даже если вы запросите действие getJokes, вы заполните атрибут jokes. но пока вы не получите ответ, экземпляр JokeController будет уничтожен. поэтому, когда вы позвоните снова, showJokes другой экземпляр доступен здесь. так что шутки пусты.

Чтобы решить эту проблему, есть много способов, таких как:

отправка идентификатора, который идентифицирует шутку в вашей СУБД, чтобы получить его через репозиторий, а затем вернуть его .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...