了解外墙和服务提供商时遇到一些麻烦

时间:2017-04-27 12:39:57

标签: php laravel

我现在一直在阅读文档,但仍然不确定我做错了什么。在我看来,初学者很难理解文档。

无论如何,我正在尝试制作类似于Auth::user()方法的东西,它会返回有关我将需要的登录用户的其他数据。

我在这里有这个助手课程:

namespace App\Helpers;

use Auth;
use Illuminate\Http\Request;

use App\Models\Grouping\User;
use App\Models\Grouping\Client;
use App\Models\Grouping\Rank;

class ClientUser {
    public function __construct($request) {
        $this->request = $request;
    }

    public function client() {
        return Client::find($this->request->session()->get('client_id'));
    }

    public function auth() {
        if (Auth::check()) {
            // Get the client
            $client = $this->client();

            // Get the client's user
            $user = $client->users()->find(Auth::user()['id']);

            // Get the rank of the logged in user
            $rank = Rank::find($user->pivot->rank_id);

            return [
                'user' => $user,
                'rank' => $rank,
                'client' => $client
            ];
        }

        return null;
    }
}

这负责执行我所描述的内容,返回我无法通过Auth::user()的其他数据。现在我正在尝试在AuthServiceProvider

中注册此课程
public function register()
    {
      // Register client auth
      $request = $this->app->request;

      $this->app->singleton(ClientUser::class, function ($app) {
        return new ClientUser($request);
      });
    }

现在我不明白的是,我应该如Auth::user()那样在我的应用程序中全局访问它。

只是“导入”它的问题是它需要请求对象,这就是我将它传递给服务容器的原因。

现在这里我被困住了。我无法在我的控制器或任何地方访问app,我无法定义Facade,因为Facade希望您返回一个应该“别名”的绑定服务字符串。

1 个答案:

答案 0 :(得分:1)

像这样更改您的服务提供商:

$this->app->bind('client.user', function ($app) {
        return new ClientUser($app->request);
      });

创建另一个从Illuminate\Support\Facades\Facade扩展的类。

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class ClientUserFacade extends Facade {
    public static function getFacadeAccessor(){
         return "client.user";
    }
}

'ClientUser => ClientUserFacade::class

alias键中添加app.php