开始laravel项目+理解

2022-08-23 20:16:40 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

一.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 个命令

  1. inatall / i
  2. update / u (下文提及与 i 的区别)
  3. dump-autoload
  4. create-project
  5. require

2 . 涉及两个文件

  1. composer.json
  2. 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(?)。让你一步步根据返回结果,执行命令。

  1. 创建 artisan 。php artisan make:command MyCommand
  2. 描述你的命令
  3. 能用(只要写在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

0 人点赞