博客列表 >Laravel框架(一)

Laravel框架(一)

nahrepus
nahrepus原创
2020年06月03日 13:22:311258浏览

一、Laravel简介
1、简介
Laravel是一套简洁、优雅的PHP WEB开发框架(PHP Web Framework),具有富于表达性且简洁的语法,Laravel是易于理解且强大的,它提供了强大的工具用以开发大型,健壮的应用,例如具有自动验证、路由、Session、缓存、数据库迁移工具、单元测试等常用的工具和功能。

官网:https://laravel.com/
中文官网:http://www.golaravel.com/
中文社区:https://laravel-china.org/
Laravel框架的广告语:
为 WEB 艺术家创造的 PHP 框架
目前大部分的框架公共的特点(了解):
(1)单入口,所有的请求必须从单入口开始,主要是便于管理(统一的参数过滤)
(2)MVC的思想(分层思想,主要是为了协同开发,实现后期的维护方便)
(3)ORM操作数据库(Object Relations Model,关联模型):AR模式
注意:Laravel框架有一个特点,所有的URL访问都必须事先定好路由规则。
2、开发环境配置与要求
Laravel框架的运行对环境是有严格要求的。

php.ini配置文件需要开启的扩展:
extension=php_openssl.dll
extension=php_pdo_mysql.dll
extension=php_mbstring.dll
extension=php_fileinfo.dll(验证码代码依赖需要该扩展)
extension=php_curl.dll(主要用于请求的发送)
httpd.conf配置文件需要开启的模块:
LoadModule deflate_module modules/mod_deflate.so
LoadModule rewrite_module modules/mod_rewrite.so

如果php的版本不满足基本要求需要升级,则有2个方法可供使用:
a. 使用带有符合要求的php版本的集成环境替换当前环境(phpstudy),如当前数据库的数据仍需要,则需要备份下数据库,在装好新的环境之后导入备份的数据库;
b. apache、mysql不做任何替换操作,单独的下载符合要求的版本php,替换原先低版本的php;
c. 建议php使用php7+版本

3、PHP的注意事项(重要)
①在php安装好之后需要将php.exe的位置的目录添加到环境变量中去(如果之前有加过别的版本的php环境变量则需要删除掉);
②得确保在添加环境变量之后,通过命令“php -v”运行得到的结果中php版本号与实际运行的版本号一致;

将PHP加入环境变量(目录):
命令行PHP版本检测运行结果(如果使用集成环境,则要求命令行显示php版本要与集成环境的版本一致):

4、composer介绍
(1)什么是composer
composer英文单词意思:音乐指挥者
composer是PHP中用来管理依赖(dependency)关系的工具,你可以在自己的项目中声明所依赖的外部工具库(libraries),composer会帮您安装这些依赖的库文件。
一句话,composer是一个工具,是为php项目准备的软件管家。
工作原理:

如上图,composer可以去packagist应用市场 里边下载软件,但是该市场只给返回软件的地址,对应的软件都是在github里边存储的,最终下载的软件是从github返回的。
https://packagist.org

官方网站:https://getcomposer.org
下载地址:https://getcomposer.org/download/
(2)composer安装使用
注意前提条件:
开启PHP中openssl扩展。
安装composer需要明确php.exe的文件路径。
安装 composer需要联网

①运行composer安装程序
②直接下一步

③选择需要使用的php所在路径(如果显示不正确,可以点击浏览自行选择)

④代理设置(默认不设置代理)

⑤直接下一步

⑥继续下一步

⑦完成安装

安装完成后,进入到命令提示符(cmd),运行“composer”,如果出现如下提示,则安装完成。

注意:如果确认已经安装好composer,但是在cmd中运行composer命令的时候没有出现上述的界面,则可能是在安装过程中,软件自行设置环境变量失败导致的。此时需要自己添加环境变量。

如果自己添加环境变量的话,得先找到composer的安装路径:

(3)使用composer方式部署laravel项目
第一步:切换镜像(软件下载地址)为国内镜像【建议】
镜像官网:
https://developer.aliyun.com/composer

通过composer可以去packagist.org市场 和 github代码库 下载功能代码
但是packagist和github对应的服务器都部署在国外。
这时“镜像”应运而生,其是把存储在packagist和github等外国服务器上的全部内容定期(更新比较及时,几分钟的延迟)同步到国内服务器里边,使得广大开发者可以不用绕远到外国,相反在自己国家就可以把软件更新到自己的项目中,方便了composer的使用。

给composer配置镜像:
修改 composer 的全局配置文件(推荐方式)

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

第二步:composer部署laravel项目【重点】。

composer create-project laravel/laravel —prefer-dist ./

命令含义:
composer:表示需要执行composer
create-project:表示需要通过composer创建一个项目
laravel/laravel:创建一个Laravel项目
—prefer-dist:表示强制使用压缩包方式下载(省时间)
./或者其他名称:表示项目需要创建的路径【在创建项目的时候一定要确保路径目录为空】
例如:需要创建一个Laravel项目

上述命令默认安装的是当前镜像网站中最新的版本:5.5.28。

比如创建一个名为shop的laravel项目

composer create-project laravel/laravel —prefer-dist shop

运行composer的时候需要注意,在什么地方运行(命令行的当前工作路径)composer则就会在什么地方创建项目。

注意,如果要下载其他版本,比如5.4版本中最新版本号(用*表示),可以使用这个命令

composer create-project laravel/laravel=5.4.* —prefer-dist ./

本次学习使用的版本号为5.5.28

composer create-project laravel/laravel=5.5.28 —prefer-dist ./

5、目录结构分析

(1)app目录:项目的核心目录,主要用于存放核心代码,也包括控制器、模型、中间件。

(2)bootstrap目录,laravel启动目录

(3)config目录,项目的配置目录,主要存放配置文件,比如数据库的配置

app.php:全局配置文件,在后期开发的时候需要频繁的使用这个配置文件;
auth.php:用户登录时候需要用到的用户认证模块的配置文件;
database.php:数据库的配置文件;
filesystems.php:文件系统(如文件存储等)的配置文件;

(4)database目录,数据迁移目录

factories:存放一些工厂模式需要用的一些文件;
migrations:迁移,存放的是迁移文件(创建/删除/修改数据表操作的类文件);
seeds:播种、种子,存放的是种子(填充器)文件(模拟向数据表中写入数据的操作类

(5)public目录,项目的入口文件和系统的静态资源目录(css,img,js,uploads)
后期使用的外部静态文件(js、css、图片等)都需要放到Public目录下

并且后期的网站的根目录也是这个目录(apache的documentroot目录为该目录路径)

(6)resources目录,存放视图文件,还有就是语言包文件的目录

language:存储语言包的目录;
views:视图文件存储目录;

(7)routes目录,是定义路由的目录,web.php是定义路由的文件

(8)storage目录,主要是存放缓存文件和日志文件,注意,如果在linux环境下,该目录需要有可写权限。(后期用户上传文件如果存在本地则也在storage下)

app:保存用户上传文件的路径;
framework:框架自带的文件存储目录;
logs:框架的日志文件存储位置;
(9)vendor目录,主要是存放第三方的类库文件,laravel思想主要是共同的开发,不要重复的造轮子(例如,里面可能存在验证码类,上传类,邮件类),该目录还存放laravel框架的源码。注意如果要使用composer软件管理的,composer下载的类库都是存放在该目录下面的。

(10).env文件:主要是设置一些系统相关的环境配置文件信息。config目录里面的文件配置内容一般都是读取该文件里面的配置信息(config里面的配置项的值基本都是来自.env文件)。

(11)artisan脚手架文件,主要用于生成的代码的(自动生成),比如生成控制器,模型文件等。
执行命令:#php artisan 需要执行的指令
要求1:php必须添加环境变量,并且保证版本;
要求2:artisan必须存在命令行当前的工作路径下;

(12)composer.json依赖包配置文件
声明当前需要的软件依赖,但是不能删除,composer需要使用。

需要重点掌握的目录(频繁使用)
目录 作用
app 保存模型文件(默认)
app/Http/Controllers 保存控制器文件
resources/views 保存视图文件
config 配置文件目录
routes 存放路由文件
database/migrations 存放数据库迁移文件(操作数据表结构)
database/seeds 存放数据库种子文件(模拟测试数据)

6、启动方式
方式一:Laravel框架提供了更简单的方式启动项目(相比配置apache)
执行命令:#php artisan serve

不推荐使用:
①能够跑php代码,但是不启动数据库。
②该方式启动后,如果修改了项目的配置.env的话,则需要重新启动才会生效。
③如果使用命令行方式进行启动,则如果想继续访问页面,需要命令行不能关闭。

方式二:使用 wamp或lamp环境(常见)
虚拟主机配置:(虚拟主机 ≠ 虚拟机)
修改apcahe的虚拟主机vhost的配置文件:

修改好配置之后需要重启Apache。

修改hosts文件:C:/Windows/System32/drivers/etc/hosts

在运行中输入“drivers”按下回车即可以直接打开“drivers”目录。【如果在线上做上线操作对应的步骤是“域名解析”】

修改hosts文件,添加la.com的域名的记录:

修改完hosts文件不需要重启Apache。
通过浏览器测试访问:

二、Laravel入门使用(路由)
什么是路由:将用户的请求按照事先规划的方案提交给指定的控制器或者功能函数来进行处理.【通俗的讲,路由就是访问地址形式】
在博客中,当我们在URL地址中,传递p(平台)、c(控制器)、a(方法)三个参数时,系统会自动跳转到指定模型中指定控制器的指定方法,这些处理过程都是由框架自动完成的。但是,在Laravel框架中,其并没有指定固定参数,其路由必须要手工进行配置。
1、路由配置文件位置
路由文件在routes/web.php。

后续我们自己定义的路由都需要在该文件中去声明。
2、routes\web.php配置文件中配置路由(重点)
(1)默认根路由
问题:为什么当我们在浏览器中访问虚拟域名http://域名时,如何显示Laravel5?
答:原因是在路由文件web.php中,其已经定义好了一个路由,这个路由称之为“根路由”,一般用于访问网站的首页。

(2)路由定义格式:
Route::请求方式(’请求的URL’, 匿名函数或控制器响应的方法)
比如请求域名下根目录
Route::get(‘/‘,function(){return ‘hello world’;});
函数的返回值,就是请求的响应。

页面上的显示:

又比如请求:http://域名/home地址则路由写成:
Route::get(‘/home’,function(){return ‘您当前访问的是/home地址’;});
显示:

注意:路由地址中的第一个“/”可以不写(包括“根路由”)。

如果还有更多的路由需要去定义,则仿照上述的形式语法继续编写即可。但是只要需要访问,则必须需要定义路由。
如果路由错误或者没有定义则会看到以下错误页面(以Laravel5.4.30为准)

如果是5.5以后的版本,则提示如下:

(3)请求方式有哪些?

如果要解决“<form action=’’ method=’post’>”这样的问题,则需要下面的两个方法解决:

常见的四个方法:
get方法:表示匹配请求类型为get的请求;
post方法:表示匹配请求类型为post的请求;
macth方法:表示匹配用户指定的几个请求类型(通过第一个参数去指定)的请求;
语法:Route::match([‘get’,’post’,’…’],$url,$calback);
any方法:表示匹配路由所支持的全部请求类型;

如果路由方法与实际的请求类型不一致,则会报错

在5.5及以后的版本中报错如下:

3、路由参数
路由参数其实就是给路由传递参数。
参数分为必选参数和可选参数。

必选参数:一旦在路由中定义了,则必须传递,不传递就会报错。
例如:
Route::get(‘home1/{id}’,function($id){
echo ‘输入的id是’ . $id;
});

路由参数的传递通过路由地址中的“{参数名}”的形式来进行传递,该形式是必选参数的形式,可以选的则使用“{参数名?}”。

如果设定了可选路由参数,但是又没有给默认值同时也没传递,则报错:

扩展:
路由参数除了上述的2种传递方式之后,还支持传统的路由参数传递:
url?id=xxx&aaa=xxxx
这种方式传递参数不受路由的限制的,不需要在路由文件中事先定义好路由参数,例如:

4、路由别名(alias)【重点】
路由别名相当于在路由定义的时候,为路由起了一个别名,在以后的程序中可以通过这个别名来获取路由的信息。/absafvdsadssdbfdsfa/qwdasd1312213fberfdvf/ascdfadvs => url1
后期在视图中会频繁使用到这样的代码“<a href=’{{route(‘url1’)}}’>xxxx</a>”
场景:在后期需要频繁的定义跳转地址,但是如果这些地址写死了的话,万一发生变化,得全部修改,这个操作比较麻烦,因此可以使用路由别名的机制(定义路由的时候给路由起名字,在后期需要使用路由的时候直接调用名字)去简化以后的操作。

给路由起名字的语法:
Route::请求类型(路由地址,响应方法) -> name(别名);

例如:给hello的路由起名字“h1”

调用该路由则可以写成:route(‘名字’);例如像刚才的h1,则需要写成route(‘h1’)
扩展补充:查看系统已经有的路由命令:#php artisan route:list

5、路由群组(理解)【实用】
有后台有如下路由
/admin/login
/admin/logout
/admin/index
/admin/user/add
/admin/user/del
…..
他们的共同点(这个共同点不局限于只是前缀)是,都有/admin/前缀,为了管理方便,可以把他们放到一个路由分组中,这个分组称之为路由群组。

使用prefix属性指定路由前缀,也就是其路由中都具备的相同部分。

语法:Route::group(公共属性数组,回调函数); 回调函数中放的剔除公共属性之后的路由

比如,想要为所有路由URLs前面添加前缀admin
Route::group([‘prefix’ => ‘admin], function () {
Route::get(login, function () {
// 匹配 “/admin/login” URL
});
Route::get(logout, function () {
// 匹配 “/admin/logout” URL
});
Route::get(user/add, function () {
// 匹配 “/admin/user/add” URL
});
});

记住:以大局为重。

案例:编写路由/home/test/test1和/home/test/test2,要求使用路由群组
公共点:/home/test
Route::group([‘prefix’ => ‘home/test’],function(){
Route::get(‘test1’,function(){

});
Route::get(‘test2’,1function(){

});
});

注意:使用路由群组不会改变其原有在地址栏中输入的地址。变的只是路由定义的写法。

在后期还会接触到middleware(中间件)属性。
三、控制器使用(C)
控制器主要的作用主要负责接收用户输入请求,调度模型处理数据最后利用视图展示数据。
1、控制器文件写在哪里?
其位置位于app/Http/Controllers

其中Auth存放的是框架自带的Auth认证相关的示例控制器文件,controller.php文件是框架的基类控制器。
2、控制器文件如何命名?
命名可以参考Auth文件夹中给定的示例文件:

文件的命名方式:大驼峰+Controller.php

友情提示:在写的时候不要带“+”。
3、结构代码如何书写?【重点】
注意:其控制器基础结构代码,不需要自己去手动编写,可以通过artisan命令行来自动生成。
因此需要记住对应的命令:

php artisan make:controller 控制器名(大驼峰)Controller

不要写“.php”。

例如:使用artisan命令创建TestController.php文件。先确定命令:

php artisan make:controller TestController

其中已经写好的结构代码:

后续如果需要更多的控制器只需要重复的执行上述的artisan命令即可。

注意:控制器可以分目录管理。

4、控制器路由(项目以该方式为主)
即,如何使用路由规则调用控制器下的方法,而不再走回调函数。
路由设置格式基本相同,只是将匿名函数换成‘控制器类名@方法名’
定义格式如下:
Route::请求方法(‘路由表达式’,’控制器@方法’);

例如:在Test控制器中创建test1方法,其中输出phpinfo信息

编写路由规则:
设定路由: /test1

效果如下:

5、接收用户输入【重点】
接收用户输入的类:Illuminate\Support\Facades\Input
Facades:“门面”的思想。门面是介于一个类的实例化与没有实例化中间的一个状态。其实是类的一个接口实现。在这个状态下可以不实例化类但是可以调用类中的方法。说白了就是静态方法的调用。
Input::get(‘参数的名字’, ‘如果参数没有被传递使用该默认值’) //类似php里三元运算符
Input::all(): 获取所有的用户的输入
Input::get(‘参数的名字’): 获取单个的用户的输入
Input::only([ ‘id’,’age’]): 获取指定几个用户的输入
Input::except([ ‘id’,’age’]): 获取指定几个用户的输入以外的所有的参数
Input::has(‘name’):判断某个输入的参数是否存在

上述方法既可以获取get中的信息,也可以获取post中信息。

在laravel中如果需要使用facades的话,但是又不想写那么长的引入操作:
Use Illuminate\Support\Facades\Input
则可以在config/app.php中定义长串的别名(在aliases数组中定义别名):

案例:在Home /index/test2路由下测试上述的方法

定义路由:
/home/index/test2

编写test2方法测试上述的获取信息的操作:
给test2路由传递一系列的参数(get传值)

在Laravel中友好输出函数:dd(需要打印的内容);
dd=dump + die
dd函数之后的内容将不会继续执行;

在Laravel中除了Input类可以获取用户的输入,Request也可以获取用户输入。
四、DB类操作数据库(重点)【预习】
按照MVC 的架构,对数据的操作应该放在 Model 中完成,但如果不使用Model,我们也可以用 laravel框架提供的 DB 类操作数据库。而且,对于某些极其复杂的sql,用Model 已经很难完成,需要开发者自己手写sql语句,使用 DB 类去执行原生sql。 laravel 中 DB 类的基本用法DB::table(‘tableName’) 获取操作tableName表的实例(对象)。
1、数据表的创建与配置
建立数据库:
建数据库的方式:
①sql语句
②图形界面 phpMyAdmin Navicat

或者:

(1)创建数据库和测试表
create table member(
id int primary key auto_increment,
name varchar(32) not null,
age tinyint unsigned not null,
email varchar(32) not null
)engine myisam charset utf8mb4;

(2)数据库在laravel框架中的配置
在.env文件里面,

也可以在config目录下面的database.php文件里面配置。使用env函数,表示先从env文件里面获取,如果获取成功则使用,如果获取失败,则使用env函数的第二个参数。

注意:如果是php artisan serve方式启动的,修改了配置文件,则需要重新启动,才能读取修改后的配置文件;如果是wamp/lamp等环境则不需要重启。

(3)在Test控制器中引入DB门面;

(4)定义增删改查需要的路由;
增加:/add get
删除:/del get
修改:/mod get
查询:/select get

2、增加信息(insert)
对数据库中的某个表增加数据主要有两个函数可以实现,分别是insert()和insertGetId()
insert(数组)可以同时添加一条或多条,返回值是布尔类型。
insertGetId(一维数组),只能添加一条数据,返回自增的id。
语法:DB::table(‘表名’) -> insert(); 连贯操作/链式操作

案例:分别使用两个函数往数据表中插入几条记录

3、修改数据( update)
数据修改可以使用update()、increment()和decrement()方法来实现。
①Update方法表示可以修改整个记录中的全部字段;
②Increment和decrement表示修改数字字段的数值(递增或者递减),典型的应用:记录登录次数、积分的增加;

案例:把id=1的名称,改名为‘张三丰’
->where()->update([ ])
注意:where方法之后可以继续调用where之类的方法。
-> where() -> where() -> where().. 这个语法是并且(and)关系语法。
-> where() -> orWhere() -> orWhere()… 这个语法是或者(or)关系语法。
Orwhere方法的参数与where一致。
Where参数顺序:
-> where(字段名,运算符,字段值)。例如id=1,则可以写成:where(‘id’,’=’,1),简写成
Where(‘id’,1);【只有=号可以简写。】

返回值,表示受到影响的行数:

案例:把id=1的用户年龄字段值加10;【了解】
DB::table(‘ member’)->increment(‘age’); 每次+1
DB::table(‘ member’)->increment(‘age’, 5); 每次+5
DB::table(‘ member’)->decrement(‘age’); 每次-1
DB::table(‘ member’)->decrement(‘age’, 5); 每次-5

4、查询数据(get)
(1)取出基本数据
案例1:获取member表中所有的数据
DB::table(‘member’)->get(); //相当于select * from member;
返回值是一个集合对象,

返回值:

完成遍历取出的数据:

注意:Get查询的结果每一行的记录是对象的形式,不是数组。

案例2:获取id<3的数据 ->where()->get();

案例3:查询id>2且年龄<21

(2)取出单行数据
DB::table(‘member’)->where(‘id’,’1’)->first();//返回值是一个对象
等价于limit 1

(3)获取某个具体的值(一个字段)
DB::table(‘member’)->where(‘id’,’1’)->value(‘name’);

(4)获取某些字段数据(多个字段)
$users = DB::table(‘member’)->select(‘name’, ‘email’)->get();
$users = DB::table(‘member’)->select(‘name as user_name’)->get();

(5)排序操作
DB::table(‘member’)->orderBy(‘age’,’desc’)->get();

(6)分页操作
DB::table(‘member’)->limit(3)->offset(2)->get();
Limit:表示限制输出的条数
Offset:从什么地方开始
组合起来等价于limit 5,5

5、删除数据(delete)【了解】
在删除中,有两种方式:物理删除(本质就是删除)、逻辑删除(本质是修改)

数据删除可以通过delete函数和truncate函数实现,
delete表示删除记录;
truncate表示清空整个数据表;
DB::table(‘table_name’)->where(‘id’,’1’)->delete();

例如:删除id小于3的记录

【补充:truncate】
语法:DB::table(‘member’) -> truncate();

6、执行原生的SQL语句(补充了解)
(1)执行原生查询语句
DB::select(“selec语句”);

(2)执行原生插入语句
DB::insert(“insert语句”);

(3)执行原生修改语句
DB::update(“update语句”);

(4)执行原生删除语句
DB::delete(“delete语句”);

(5)执行一个通用语句
DB::statement(“语句”);

上一条:PHP路由原理下一条:jquery 事件 与ajax
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议