首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel源码解析之用户认证系统(二)

上一节我们介绍了Laravel Auth系统的基础知识,说了他的核心组件都有哪些构成,这一节我们会专注Laravel Auth系统的实现细节,主要关注 Auth也就是 AuthManager是如何装载认证用的看守器...config['driver']]($this->app, $name, $config); } /** * 注册一个自定义的闭包Guard 驱动器 到customCreators属性中...] = $callback; return $this; } /** * 注册一个自定义的用户提供器创建器到 customProviderCreators属性中...方法中对这部分逻辑进行更改,注册完用户后会调用SessionGuard的login方法把用户数据装载到应用中,注意这个login方法没有登录认证,只是把认证后的用户装载到应用中这样在应用里任何地方我们都能够通过...Str::contains($key, 'password')) { $query->where($key, $value); }

2.1K30

【Laravel系列7.8】广播系统

pusher 是官方文档上推荐的,但是,注意这里有但是了哦。这玩意需要去它的官网上注册之后拿到 key 了才能使用。而在这们日常的使用中,其实更多的会使用 redis+socket.io 这种搭配。...不过问题就来了,在 Laravel8 相关的文档中,关于 redis 和 socket.io 的内容基本上没了。所以我们需要去参考 Laravel6 以及更低版本的文档。这个大家在查阅的需要注意哦。...另外,在这个事件类中,我们定义了一个公共属性用于接收构造函数传来的参数,在广播事件中,公共属性是可以广播到前端去的。 接下来,我们定义一个路由用于触发广播事件。...在具体的页面中,我们直接去调用它的 channel() 方法,给一个指定的频道名称,然后监听这个频道中的具体事件,也就是我们在 Laravel 中定义的事件类名。...如果你的系统中有类似的通知需求,完全可以考虑使用这套广播系统来实现了,多少还是比轮询的功能要强大许多,大家多多尝试就能体会到好处。最后我再引用一张某位大佬画的广播系统的关系图。

2.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Laravel系列4.3】模型Eloquent ORM的使用(一)

    但是在我们今天的演示中,不需要这两个字段,所以也可以设置一个属性来关闭 Model 针对它们的自动处理。...在这里比较奇怪的是,我们在实例化和赋值的过程中没有给对象的主键 id 赋值,但是在 save() 之后,id 就有值了,而且是我们新插入的数据 id ,是不是很高大上。...当然,在 Laravel 中,可以不在数据库层面进行严格的设置,就可以在框架代码中实现主外键的关联。...等等,不对呀,我们在模型里面定义的是一个 gender() 方法,怎么在外面使用的是一个属性?别急,我们再来看看源码,看看框架中是如何把调用属性变成调用一个方法的。...其实这段代码已经很清楚明了了,如果没有 key 就返回一个空的内容,如果 key 存在于当前这个模型类的相关属性中,则调用一些处理方法后返回。

    8.9K20

    Laravel源码笔记(二)路由

    一、总体设计思路 总体上,laravel的路由系统分为两个服务:RouteServiceProvider和RoutingServiceProvider。...整个路由服务的框架大致如下: image.png 在两个服务周期中都扮演者重要角色的Router路由器,是在laravel初始化的过程中由RoutingServiceProvider注册到...实际上,所有 laravel 路由都定义在位于 routes 目录下的路由文件中,这些文件内的路由被laravel视为一个大的路由组,在RouteService启动的过程中通过Route门面加载出来(所以路由配置文件不需要声明对...laravel 首先对路由进行正则编译,得到路由的正则匹配串regex,然后利用请求的参数url尝试去匹配,如果匹配成功,那么就会选定该路由: class Route { public function...其次,这里用到了上一步获取的第一个可选参数位置,因为在子命名组语法中规定: 若当前路由参数不是可选参数的时候,正则表达式就是固定模式,例如:/(?

    7.5K40

    Laravel源码解析之Request

    很多框架都会将来自客户端的请求抽象成类方便应用程序使用,在Laravel中也不例外。...创建Request对象 我们可以在Laravel应用程序的 index.php文件中看到,在Laravel应用程序正式启动完成前Request对象就已经被创建好了: //public/index.php...{ //在Symfony request instance的基础上创建Request实例 public static function createFromBase(SymfonyRequest...} return $dup; } Request对象创建好后在Laravel应用中我们就能方便的应用它提供的能力了,在使用Request对象时如果你不知道它是否实现了你想要的功能...总结 随着Request最终到达对应的控制器方法后它的使命基本上也就完成了, 在控制器方法里从Request中获取输入参数然后执行应用的某一业务逻辑获得结果,结果会被转化成Response响应对象返回给发起请求的客户端

    2.4K20

    Laravel源码分析之模型关联

    使用模型关联给应用开发带来的收益我认为有以下几点 主体数据和关联数据之间的关系在代码表现上更明显易懂让人一眼就能明白数据间的关系。...($user->posts as $post) { // } 还记得我们上一篇文章里讲获取模型的属性时提到过的吗?...“如果模型的 $attributes属性里没有这个字段,那么会尝试获取模型关联的值”: abstract class Model implements ... { public function...$key` 则从这里取出$key对应的值 //否则就尝试去获取模型关联的值 if (array_key_exists($key, $this->attributes) |...eagerLoadRelations($models); } return $this->related->newCollection($models); } } 关联方法 出了用动态属性加载关联数据外还可以在定义关联方法的基础上再给关联的子模型添加更多的

    9.6K10

    Laravel5.2之PHP重载(overloading)

    重载(overloading) 在Laravel中就大量应用了重载相关知识,如在IlluminateSupportFacadesFacade中就用到了方法重载知识:使用魔术方法__callStatic(...PHP中通过引入魔术方法来实现动态的创建类属性和方法,包括属性重载的魔术方法和方法重载的魔术方法。当然,重载是在类的外部发生的,所以所有魔术方法必须声明public,而且参数不能引用传递。...Laravel中方法重载使用 在使用Laravel的Facade这种模式时,是通过Facade帮我们代理从容器Container中取出所需要的服务Service,就不需要通过$app['config']...public function get($key, $default = null) { return Arr::get($this->items, $key, $default...实际上,'config'服务是在IlluminateFoundationBootstrapLoadConfiguration注册的,看bootstrap()方法源码: /** * Bootstrap

    3.1K31

    浅谈Laravel队列实现原理解决问题记录

    问题 公司项目使用Laravel的开发的两个项目在同一个测试服务器部署,公用同一个redis。在使用laravel中的队列时,产生冲突干扰。...查找问题原因 在laravel 队列的操作类IlluminateQueueRedisQueue.php中可以看到pushRaw()方法: // 将一任务推入队列中 public function pushRaw..., value)是将value推入键值为key的redis队列,key的值则是通过$this->getQueue($queue) 获取到的 protected function getQueue(...connection->pop()当参数存在时会将参数解析,/**【参考文章的时候,并不建议直接复制,应该尽量地读懂】**/优先处理排在前面的队列名称,将队列名称传入pop($queue), pop()会尝试从指定队列或默认队列中获取队列任务...解决方法 将queue的配置文件中默认队列修改为不同的名称,比如: 'queue' => laravel1','queue' => laravel2'。

    94010

    【Laravel系列4.7】连接redis以及缓存应用

    在配置中有一个 default 和一个 cache 的配置,这个 cache 配置实际上是如果我们将 Laravel 默认的缓存目标设置为 Redis 的话,就会走这个配置,它会默认使用 Redis 的...缓存配置及应用 我们在 Laravel 中,可以像上面那样去使用 redis 来充当缓存,不过大家的选择可不能只限于 redis 呀,在很多情况下,我们可能会用别的缓存工具,比如说 Memcached...在默认情况下,走得都是 file 。我们可以看到 stores 属性中 file 的配置,只需要指定 driver 为 file ,并且指定一个 path ,也就是缓存文件的保存路径。...仔细看配置文件,会发现有一个 prefix 属性,这里是指定 cache 会自动添加的前缀值,默认会加上 laravel_cache 这样一个前缀,于是,保存在 redis 中的键就需要使用 laravel_cache...但是呢,由于缓存数据库都相对来说会比关系型数据库简单一些,因此这些组件在 Laravel 中的呈现反而相对来说会简单一些。

    1.1K30

    3分钟短文:Laravel Form,让你不再写 HTML 的好“库”

    laravel作为扩展性极强的框架,自然是为广大后端开发者赋能。 [img] 本文我们讲一个简单且常用的表单类 Form。...代码时间 还记得我们之前文章提到的,laravel快速注册restful api方式路由方法的方式吗?...('events.create'); } 相对应地,需要创建一个blade文件,resources/views/events/create.blade.php , 为了使用框架提供的 Form 类库,在...Form::text第一个参数是分配给输入元素的name属性的字符串,该值也将分配给id属性,除非你在数组中明确为id分配值,并作为第三个参数传递。...第二个参数(当前设置为null)可用于设置表单字段的value属性。设置为null时,将使用空白值。 接着我们为input输入框添加一个标签,用于提示给用户该字段的用途。

    1.3K30

    Laravel源码解析之ENV配置

    Laravel在启动时会加载项目中的 .env文件。对于应用程序运行的环境来说,不同的环境有不同的配置通常是很有用的。...具体有三种方法,可以按照使用习惯来选择使用: 在环境的 nginx配置文件里设置 APP_ENV环境变量 fastcgi_param APP_ENV dev; 设置服务器上运行PHP的用户的环境变量...因为用我们在持续集成中做自动化测试的时候通常都是在容器里进行测试,所以 Dotenv不会覆盖已存在环境变量这个行为就相当重要这样我就可以只设置容器里环境变量的值完成测试而不用更改项目里的 env文件,等到测试完成后直接去将项目部署到环境上就可以了...我们来看看 env函数的源码: function env($key, $default = null) { $value = getenv($key); if ($value ===...而且在服务器上给运行用户配置的环境变量会共享给用户启动的所有进程,这就不能很好的保护比如 DB_PASSWORD、 API_KEY这种私密的环境变量,所以这种配置用 putenv设置能更好的保护这些配置信息

    2.1K20

    全局梳理、分析、总结 laravel 的核心概念

    访问控制(节流) Laravel 包含了一个 middleware 用于控制应用程序对路由的访问。如果想要使用, 请将 throttle 中间件分配给一个路由或者一个路由组。...在某些情况下,路由注册的速度甚至能快上 100 倍。要生成路由缓存,只需执行 artisan 命令 php artisan route:cache 运行此命令后,将在每个请求上加载缓存的路由文件。...可通过 $except 数组属性设置在维护模式下仍能访问的网址。...每一种队列驱动的配置都可以在该文件中找到,包括数据库,Beanstalkd ,Amazon SQS,Redis,以及同步(本地使用)驱动。其中还包含了一个 null 队列驱动用于那些放弃队列的任务。...Laravel 服务容器是用于管理类的依赖和执行依赖注入的工具。依赖注入这个花俏名词实质上是指:类的依赖项通过构造函数,或者某些情况下通过「setter」方法「注入」到类中。

    6.1K41

    通过 Laravel 创建一个 Vue 单页面应用(二)

    在这个教程中,我们通过学习怎样从 Vue 组件中的 Laravel API 加载异步数据,来继续在 Laravel 中创建一个 Vue 单页应用(SPA)。...在这个组件中,在组件 创建 的时候获取异步数据。定义一个 fechData() 方法来初始化 error 和 users 属性为 null,设置 loading 为 true。...如果你刷新页面几次,你可能会看到“加载中…”, 如果你检查开发者工具,你会发现一个没有捕获的来之 Axios 请求的错误: 我们可以处理这个失败的请求通过在 Axios prpmise 上链式调用 catch...这个错误信息在返回给 exception.message 属性。...在 第三部分 我们尝试在 Vue Router 中使用一个回调来获取数,在导航到组件之前,让你看看如何在渲染 router view 之前获取数据。

    3.4K30
    领券