4

初めての Laravel 4 アプリケーション (PHP) を構築しています。

ほとんどのモデルとコントローラーで、このようなものを頻繁に呼び出す必要があることに気づきました...

$this->user = Auth::user();

だから私の質問は、アプリケーションでこれを数回呼び出すか、データベースに数回アクセスするか、それとも残りのリクエスト/ページビルドのためにどこかにキャッシュするのに十分賢いですか?

それとも、自分で別の方法で行う必要がありますか?Auth クラスを一瞥しましたが、すべてのファイル (Auth 用に 16 ファイル) を検査する時間がありませんでした。

4

2 に答える 2

9

メソッドのコードは次のとおりAuth::user()です。

// vendor/laravel/framework/src/Illuminate/Auth/Guard.php

/**
 * Get the currently authenticated user.
 *
 * @return \Illuminate\Auth\UserInterface|null
 */
public function user()
{
    if ($this->loggedOut) return;

    // If we have already retrieved the user for the current request we can just
    // return it back immediately. We do not want to pull the user data every
    // request into the method becaue that would tremendously slow the app.
    if ( ! is_null($this->user))
    {
        return $this->user;
    }

    $id = $this->session->get($this->getName());

    // First we will try to load the user using the identifier in the session if
    // one exists. Otherwise we will check for a "remember me" cookie in this
    // request, and if one exists, attempt to retrieve the user using that.
    $user = null;

    if ( ! is_null($id))
    {
        $user = $this->provider->retrieveByID($id);
    }

    // If the user is null, but we decrypt a "recaller" cookie we can attempt to
    // pull the user data on that cookie which serves as a remember cookie on
    // the application. Once we have a user we can return it to the caller.
    $recaller = $this->getRecaller();

    if (is_null($user) and ! is_null($recaller))
    {
        $user = $this->provider->retrieveByID($recaller);
    }

    return $this->user = $user;
}

私には、リクエストごとに1回だけデータベースからユーザーを取得するように見えます。そのため、何度でも呼び出すことができます。DB にヒットするのは 1 回だけです。

于 2013-08-30T20:29:00.487 に答える