<?php namespace Illuminate\Support\Facades; /** * @see \Illuminate\Auth\AuthManager * @see \Illuminate\Auth\Guard */ class Auth extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'auth'; } }
[auth]的注册
<?php namespace Illuminate\Auth; use Illuminate\Support\ServiceProvider; class AuthServiceProvider extends ServiceProvider { protected function registerAuthenticator() { $this->app->singleton('auth', function ($app) { // Once the authentication service has actually been requested by the developer // we will set a variable in the application indicating such. This helps us // know that we need to set any queued cookies in the after event later. $app['auth.loaded'] = true; return new AuthManager($app); }); $this->app->singleton('auth.driver', function ($app) { return $app['auth']->driver(); }); } }
由于不存在这个方法
Illuminate\Auth\AuthManager->guest()
所以调用父类的以下方法
<?php namespace Illuminate\Support; use Closure; use InvalidArgumentException; abstract class Manager { public function __call($method, $parameters) { return call_user_func_array([$this->driver(), $method], $parameters); } }
$this->driver()也就是
public function driver($driver = null) { $driver = $driver ?: $this->getDefaultDriver(); // If the given driver has not been created before, we will create the instances // here and cache it so we can return it next time very quickly. If there is // already a driver created by this name, we'll just return that instance. if (!isset($this->drivers[$driver])) { $this->drivers[$driver] = $this->createDriver($driver); } return $this->drivers[$driver]; }
$this->getDefaultDriver()也就是
<?php namespace Illuminate\Auth; use Illuminate\Support\Manager; class AuthManager extends Manager { public function getDefaultDriver() { return $this->app['config']['auth.driver']; } }
$this->app['config']['auth.driver'];其实就是config目录下,auth.php文件的driver设值
<?php return [ 'driver' => 'eloquent',
那么上面的$this->createDriver($driver);就是
<?php namespace Illuminate\Support; use Closure; use InvalidArgumentException; abstract class Manager { */ protected function createDriver($driver) { $method = 'create'.ucfirst($driver).'Driver'; // We'll check to see if a creator method exists for the given driver. If not we // will check for a custom driver creator, which allows developers to create // drivers using their own customized driver creator Closure to create it. if (isset($this->customCreators[$driver])) { return $this->callCustomCreator($driver); } elseif (method_exists($this, $method)) { return $this->$method(); } throw new InvalidArgumentException("Driver [$driver] not supported."); } }
也就是
<?php namespace Illuminate\Auth; use Illuminate\Support\Manager; class AuthManager extends Manager { /** * Create an instance of the Eloquent driver. * * @return \Illuminate\Auth\Guard */ public function createEloquentDriver() { $provider = $this->createEloquentProvider(); return new Guard($provider, $this->app['session.store']); } }
所以auth最终就是Guard
相关推荐
Laravel的Facade设计模式是其强大功能的一部分,它使得开发者可以简单地调用服务容器中的服务,而无需实例化对象。下面将详细介绍这个主题。 **1. Facade原理** Laravel的Facade实际上是一个静态代理,它在幕后通过...
当调用一个外观方法时,服务容器会根据预定义的绑定找到并实例化相应的类。服务容器通过解析类的构造函数来解决依赖注入,使代码更易于测试和扩展。 **3. 解析过程** - **外观名称到类名的映射**:每个外观类都有一...
Laravel OneNet扩展可能提供一个Facade,允许开发者通过简单的静态调用来调用OneNet的API。 3. **Models**: 可能会定义一些Eloquent模型,对应于OneNet平台上的资源,如设备、数据点等,方便进行数据库操作。 4. *...
在Laravel框架中,"laravel-money"是一个用于处理货币计算和格式化的库,尤其适合在电子商务或财务应用中使用。这个库提供了便利的方法来处理货币的加减、转换和格式化,使得开发者能更专注于业务逻辑,而不是基础的...
2. Facade:为方便调用Celery提供的功能,扩展包可能提供了一个Facade,类似于Laravel的`Queue`和`Cache`,使得调用命令更加简洁。 3. 配置文件:配置文件可能包含了连接Redis的参数,以及Celery的设置,如worker...
【描述】"Laravel开发-neteaseim-laravel 使用Neteaseim作为Laravel立面" 提到的“立面”(Facade)是 Laravel 中的一个设计模式,它为服务容器中的绑定提供了“静态代理”,使代码更简洁、可读性更强。将网易云信...
1. **服务提供者**:`laravel-omnipay` 提供了一个 Laravel 服务提供者,可以自动注册 Omnipay 到 Laravel 的服务容器中,简化配置过程。 2. **中间件**:通过 Laravel 的中间件,可以轻松地对支付请求进行处理和...
`Laravel-hellosign-laravel` 是一个专门为 Laravel 设计的 HelloSign SDK,方便开发者在 Laravel 应用中轻松实现与 HelloSign 的集成。 Laravel 是一个基于 PHP 的流行开源框架,以其优雅的语法、强大的路由系统和...
`Razorpay/Slack` 包提供了 Laravel 4 和 5 的支持,包括一个 Laravel 的服务容器绑定(Service Provider)和一个 Facade(外观模式)。服务提供者负责注册包的配置和服务,而 Facade 提供了简洁的调用接口,让...
在 Laravel 的服务容器中注册 API 客户端后,我们可以编写一个 facade,为应用提供一个简单的接口来调用 Expedia API。Facade 提供了一个静态的接口,背后其实是通过依赖注入来调用非静态的服务。这样,我们可以在...
在本文中,我们将深入探讨 Laravel 开发中的一个重要组件——`laravel-newsletter`。这个开源项目是为 Laravel 应用程序提供电子邮件订阅管理功能的扩展,它简化了处理用户订阅、发送新闻通讯以及管理邮件列表的过程...
在IT行业中,Laravel是一个非常流行的PHP框架,以其优雅的设计和强大的功能深受开发者喜爱。本项目“Laravel开发-alipay”专注于在Laravel框架下集成支付宝(Alipay)的服务,使得开发者能够轻松地在自己的应用中...
在Laravel中,外观是一种静态代理设计模式,它提供了一个简单的接口来访问复杂系统或服务。LaravelForecast的外观提供了一种简洁的方式来调用forecast php库的方法,例如查询天气预报。使用外观,开发者可以避免在...
在Laravel框架中,"Facades"是一种设计模式,它为开发者提供了简单、静态的调用接口,实则背后依赖于服务容器。Easemob是企业级的即时通讯(IM)云服务,用于构建聊天功能。将Easemob与Laravel结合,通过Facades进行...
在本文中,我们将深入探讨Laravel开发中的一个重要组件——`laravel-translation`。这个包为Laravel框架提供了强大的多语言支持,不仅限于传统的PHP数组,还扩展到了数据库和缓存存储,使得管理和维护多语言网站变得...
【Laravel开发-laravel-captcha】是针对Laravel框架的一个扩展包,主要目的是为了实现验证码功能。在Web应用中,验证码是一种防止恶意机器人或者自动化脚本进行操作的安全机制,例如防止垃圾邮件、刷票等行为。这个...
在Laravel中,每个Facade都有一个对应的类,这个类通常位于`\Illuminate\Support\Facades`命名空间下。例如,`App::make('foo')`实际上会调用服务容器来创建并返回`'foo'`绑定的类实例。Facades的静态方法调用会被...
当你在类的构造函数或方法中声明一个依赖时,Laravel会在运行时自动提供这个依赖的实例。这减少了代码的耦合度,使得每个组件只关注自己的职责。 2. **服务绑定**: 服务容器的核心是服务绑定。你可以将一个类或...
在Firebase控制台上创建一个新的Web应用,获取JSON配置文件,然后在Laravel的`.env`文件中设置相应的环境变量,例如: ``` FIREBASE_DATABASE_URL=https://your-project-id.firebaseio.com/ FIREBASE_SERVICE_...
"Laravel 开发 - Laravel from Scratch" 是一个教程,旨在帮助初学者或有经验的开发者逐步学习并掌握 Laravel 框架,从而能够构建高效、可维护的 Web 应用程序。 ### 1. 安装与环境配置 在开始 Laravel 之旅之前,...