大家好,又见面了,我是你们的朋友全栈君。
一.laravel运行理解
Ⅰ.开始,public/index.php
此文件有两个作用。①:作为入口的起点,引导构建服务所需要的一切(包括路由,服务容器之类的)。②:作为所有请求的必经之路。请求经过此文件,会被“指派”到合适的路由,中间件等等进行处理。
tips:所以用phpstudy的时候,记得设置一下 ① 指定项目的根目录。② 指定下请求对应的文件。我用的nginx,设置的 vhost.config 文件。
画起第一行用以指定项目的根目录,就apache的www文件的意思。第二行是指定所有请求最终会定向到public/index.php这个文件。为啥呢,上面有说
生命周期:
—- 第一个请求驾到 —
1. 进入pubic/index.php 文件
2.index.php 加载composer 自动生成的加载设置(我的理解是加载依赖的意思 )
3. 利用 bootstrapper/app.php 生成 Laravel实例一个
4.执行请求处理前的任务(including 错误处理,日志,环境检测),然后请求经过 Http 内核(app/http/kernel.php) (相当于在server系统的层面上对请求弄几个钩子)
5. ….???provider 和服务容器?
6. 请求交给 路由处理
1.1初始化
index.php –(引导)–>bootstrap/app.php–(到这里)–>config.php–(东西通过provider注册到服务容器)–>构建完成可处理请求
注册服务容器:provider 类(如app/providers文件夹内的)把服务绑定到服务容器上(其实还没绑定)。在config/app.php 内有 providers 数组,在引导 laravel 应用初始化 时,利用该数组进行处理(真的绑定了)
1.2处理请求
请求 –(必经app/http/kernel.php,以使用中间件)–> 进入应用程序 —-> respond
2.1服务容器
一个laravel应用有一个服务容器。服务容器为了编码优雅。感觉起来是一个全局的对象,可通过这个对象上挂载的key,获得对应的实例/工厂函数实例。
具体可见服务容器相关API
比方说,你有10个地方用到了new Camera();这个实例。然后你想在测试的时候把这10个Camera()的功能变成MockCamera()。
如果不用服务容器,你要找10个地方,一个个改成MockCamera()。如果是100个地方呢?
但是如果使用服务容器,原本camer=new Camera()的地方改成 camera=app()->make(‘camera’);。
插播,绑定到服务容器的形式是:$this->app->bind(‘camera’,function(){ return new Camera();});。因为绑定了服务容器,所以把Camera改成MockCamera的时候,我只要在绑定这里,把 return 的 new Camera();改成 new MockCamera();,这样,不管是上面提及的10个地方,还是100个地方,都改完了。
Ⅱ 。composer 理解,安装laravel
1 . 目前接触到 4 个命令
- inatall / i
- update / u (下文提及与 i 的区别)
- dump-autoload
- create-project
- require
2 . 涉及两个文件
- composer.json
- composer.lock.json
3 . 版本约束
composer 默认会下载稳定版的插件。要是你要alpah,beta等不稳定版本,需要你自己指定
composer ,项目级别对依赖进行管理。意思是,你在A项目玩的天花龙凤,B项目说:阿巴阿巴我什么也不知道。当然,你可以对composer的全局进行设置
composer默认会从packagist中寻找依赖,packagist 是默认来源。如果composer.json中定义了repositories 的话则会从 repositories 中找。但是从指定的 repositories 中找不到的话,还是会从 packagist 中寻找。
composer.json
你要安装什么依赖
composer.lock.json
一个项目中,只要有人运行过composer i 或者composer install 命令,就会生成这个文件。
这个文件用以锁住当前项目使用的依赖版本:
① 对于个人开发:个人项目可能开发 3 年。你项目当前使用依赖 A 的1.0版本。但是 A 依赖一直在更新,3 年后版本更新到4.0,但是你项目不兼容 A 依赖的 4.0 版本。所以composer.lock.json 限制住是1.0版本。
② 对于多人开发:有利于限制多人的依赖版本一致。
composer i 与 composer u
第一次安装的时候用 i ,后面要更新了用u。尝试的时候,只要 i 过一次后,composer.lock.json会再,那么再 i 是不会安装什么东西。需要用到 u ,u 的时候会安装新加的依赖,也会把原有依赖更新到指定版本。
命令 create-project
用以安装一个项目。我用来安装laravel。也可以从 git 上拉取指定版本。但是git拉取的,需要自己手动设置一些东西(使用命令也需要手动设置。配置下.env 什么的)。比方说复制粘贴 .env鸭,执行key:genderate命令鸭,之类的。看你喜欢。自己电脑的话我喜欢用命令。
可以加上 –prefer-dist 参数哦,跟这个相反的是 –prefer-source.前者安装起来快一点,意思是硬盘由的话就从硬盘获取资源装上,可以避开由于安装不正确引起 git 的错误。
安装laravel例子:composer create-project laravel/laravel 项目文件夹名称 laravel版本
为啥是 laravel 是laravel/laravel 呢。为了方便区分。一个项目,用 vendor-name/project-name 来定位到这个项目。laravel这个项目就是 laravel/laravel。
require
指定依赖添加到composer.json中,并根据现状,执行 i 或 u
命令 dump-autoload
目前理解是。因为有的依赖带有autoloade信息。可以通过这个命令,利用新安装依赖带有的autoload信息,自动给你配置东西,达到目的:项目里可以直接用新依赖提供的类。不用你重新安装啥的,就是图个方便。我目前没遇到过这个新依赖方面需要用到这个命令的问题。倒是在多人开发中,别人写的Seeder类找不到了,一直migrate一直报错。用这个就好了。
版本约束
对我而言主要是版本号
getcomposer,org,doc,articles,versions,md
不想写先马着
Ⅲ。Artisan 理解
composer 与artisan 傻傻分不清
artisan 是 laravel提供的命令行接口,用来与larave 应用程序进行交互。比方说,利用 eloquent 进行数据库交互什么的(像seeder那样插入数),你能在项目内做什么,artisan也能做什么。很方便 8 。he
学到了一个概念。文档中介绍artisan,提及到的 REPL ,是 read-eval-print loop 的缩写。像你电脑内命令行那样的东西,意即:输入(命令)read,评估(执行)evalute,输出结果print ,loop(?)。让你一步步根据返回结果,执行命令。
- 创建 artisan 。php artisan make:command MyCommand
- 描述你的命令
- 能用(只要写在app/console/commands文件夹下的会自动注册。或者你在console文件夹下kernel.php中注册)。
命令像你写的一个 function。包含 ① 方法名( 签名:$signature),② 输入(Ⅰ. 参数 。Ⅱ . 选项)
详见:https://learnku.com/docs/laravel/6.x/artisan/5158#arguments
参数跟函数感觉起来差不多。虽然说写法有点区别,参数 的写法是名字。选项带有两个横杠 —
参数是必填的东西,选项是可填的东西,填/不填的情况下可指示布尔值。
都是可以指定默认值的东西
我发现一个很有趣的现象,composer主页的公仔,会换衣服
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139556.html原文链接:https://javaforall.cn