Laravel框架第1天
一、Laravel概述
1、Laravel框架简介
- Laravel是一套简洁、优雅的PHP WEB开发框架(目前最流行的PHP框架,
基于symfony开发)
- 具有富于表达性且简洁的语法。更加语意化
- Laravel是易于理解且强大的,它提供了强大的工具用于开发大型、健壮的应用,如:
验证、反向路由、会话技术、缓存、数据迁移、单元测试等等常用工具和功能
2、什么是Laravel
就是用PHP写的框架
3、Laravel框架相对于其他框架优势
强大路由(route)
命令行工具(artisan):加快项目开发(很多手动的工作都自动了)
blade模版:可继承、渲染速度快、简化view开发和管理
数据迁移(Migrations): 管理数据库和版本控制
单元测试(PHPUnit):保证稳定性(便于发现问题,无论是需求更变还是代码本
身的bug及代码重构)
支持Composer:项目组件管理工具
二、Laravel的安装
准备:PHP运行环境
a. 环境要求
b. 通过phpStudy搭建PHP运行环境
c. PHP相关配置(修改并保存)
1)切换PHP版本
2)开启openssl、mbstring、pdo、fileinfo扩展
- 修改时区
- 验证
d. 设置PHP环境变量
验证是否设置成功
e. 创建虚拟主机
- 修改C:\Windows\System32\drivers\etc\hosts文件
- 创建文件e:\www\test.php文件
- 新增虚拟主机
发现:直接输入网址不加具体访问的php文件名则显示403 Forbidden
解决:
1、安装方式
- 方法1:直接下载源代码安装
- 方法2:通过composer安装
2、直接下载源代码安装【方法1】
步骤1:下载
下载地址:http://laravelacademy.org/resources-download
步骤2:解压到指定虚拟主机目录
步骤3:访问(注:入口文件在public目录下)
3、通过Composer安装Laravel【方法2】
1)什么是Composer
- 介绍:是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中
声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。
- 理解:
- 如果PHP是win操作系统,composer就是杀毒软件的软件管家
- 如果PHP是Linux操作系统,composer就是yum
之前:项目中需要发送邮件、验证码等功能必须自己去网上下载整合到项目中
现在:通过composer命令安装自动整合到项目中
- 总结:
- Composer是为PHP准备的软件管家,项目所需工具库都可以通过Composer下载
2)下载Composer
【方法1】
- 下载composer-setup.exe文件安装
- 好处:傻瓜式、安装简单
- 坏处:容易报错、仅win操作系统使用
【方法2】
- 下载composer.phar文件安装
- 好处:跨平台
- 坏处:渣渣上手难
■ 方法1:通过composer-setup.exe安装
步骤1:双击
步骤2:安装(注:除下图选择php.exe其余直接下一步next):
步骤3:检查是否安装成功(在DOS窗口输入 composer出现下图字样则安装成功)
■ 方法2:通过composer.phar文件安装
步骤1:该文件免安装所以可以直接使用
步骤2:检查是否安装成功(在DOS窗口输入 composer出现下图字样则安装成功)
3)Composer命令
- 复杂:php composer.phar 指令
- 简化:composer 指令
说明:后期大量使用composer命令,语法:【php composer.phar 指令】
发现:每次重复敲【php composer.phar】太长
解决:
- 将composer.phar放到www目录中然后输入DOS命令
【echo @php “%~dp0composer.phar” %*>composer.bat】后发现www目录下新增了.bat文件将其加入环境变量即可
2)将composer.bat将去环境变量
3)验证
安装Laravel(后天详细讲解)
步骤1:配置通过国内镜像下载
composer config -g repo.packagist composer https://packagist.phpcomposer.com
步骤2:通过Composer下载框架
composer create-project laravel/laravel test_laravel
三、Laravel目录结构分析
1、整体目录
2、app目录
3、Http目录
4、boostrap目录
5、config目录
6、database目录
7、public目录
为什么public下比tp32安全
为什么tp32每个目录下都要新建index.html文件
8、resource目录
9、storage目录
10、vendor目录
11、.env文件
︴思考:通过框架完成下属功能需要哪些知识点?
1、留言列表显示
【展示视图】
如何创建路由
如何创建控制器
如何创建视图
【循环显示数据】
控制器如何操作数据库
视图如何循环
添加留言
【页面显示】如何创建路由 -> 如何创建控制器 -> 如何创建添加表单视图
【数据处理】如何接口提交的数据,如何保存到数据库
总结(新框架快速上手原则)
如何创建路由
如何创建控制器
如何创建视图
四、Laravel框架中的控制器
1、控制器的存放目录
app\Http\Controllers\平台名\控制器名Controller.php
控制器的命名规则
规 则:大驼峰命名法(单词首字母大写)
举个栗子:UserController.php 或 GoodsController.php
3、创建控制器
方法1:artisan命令创建 (使用代码生成器创建控制器)
命令:php artisan make:controller 平台名\控制器名Controller
说明:必须在项目根目录下执行,因为artisan在根目录下
方法2:手动创建
直接复制已经创建的控制器即可
路由1
准备:PHP闭包
1)JS闭包
- 概念:在JS中当一个函数执行时可以让其内部局部变量不受其他作用域影响,同
时当前函数执行完毕后还可能让其内部变量常驻内存不销毁的运行机制被称为JavaScript的闭包。
- 定义:两个函数彼此嵌套,并返回内部函数
function f1() {
function f2() {
}
return f2;
}
——————————————————————
————————————————————
var arr = new Array();
for (var i = 1; i < 3; i++) {
//arr[i] = function(i) {
// alert(i);
//}
arr[i] = f1(i);
}
function f1(num) {
function f2() {
alert(num);
}
return f2;
}
PHP闭包函数(php5.3+)
1、路由的作用
- 概念:路由就是网址的参数
- 作用:将用户发送的HTTP请求,交给指定的控制器方法处理
2、路由配置文件
3、配置路由(routes\web.php)
1、路由定义格式(语法)
Route::HTTP请求方法(路径,闭包函数或者控制器方法)
响应多个HTTP请求
Route::match([请求类型,请求类型….], 路径,闭包函数或者控制器方法)
响应任意HTTP请求
Route::any(路径,闭包函数或者控制器方法)
2、请求方式有哪些?
可以是HTTP的8种请求类型之一,如:get、put、post、delete…等,常用get和post
︴练习
- 不同的请求响应
- get请求,闭包函数响应
- get请求,控制器响应
- post请求,闭包函数响应(注:app\Http\Kernel.php注释VerifyCsrfToken)
- post请求,控制器响应
- 响应多个HTTP请求
- 响应所有HTTP请求
4、路由参数
1)语法
Route::HTTP请求方式(路径/{参数},闭包函数或控制器方法名)->where(参数名,正则表达式)
多个参数: 路径/{参数}/{参数} 或者 路径/{参数}-{参数}/{参数}
多个限制:->where([参数=>正则,…,参数n->正则n])
多学一招:{参数名?} 表示可以设置默认值
2)闭包函数操作参数
- 一个参数
#一个参数
Route::get(‘/test7/{id}’, function($id){
echo $id;
});
- 多个参数
#多个参数
Route::get(‘/test7/{id}/{name}’, function($id, $name){
echo $id . ‘__’ . $name;
});
- 默认参数
3)控制器操作参数
4)正则表达式限制参数
- 限制一个参数
- 限制多个参数
5、路由群组
1)概念
多个路由之间共享路由属性,减少冗余。
语法
Route::group([属性名=>属性值n,…,属性名=>属性值n],function(){
将其他路由放进来即可….
})
3)案例
#路由群组举个栗子(需求:完成用户增删改查)
Route::group([‘namespace’=>’Admin’, ‘prefix’ => ‘/user’], function(){
#Route::get(‘/user/index’, ‘Admin\[email protected]’);
#Route::get(‘/user/create’, ‘Admin\[email protected]’);
#Route::get(‘/user/delete/{id}’, ‘Admin\[email protected]’);
#Route::get(‘/user/update’, ‘Admin\[email protected]’);
Route::get(‘index’, ‘[email protected]’);
Route::get(‘create’, ‘[email protected]’);
Route::get(‘delete/{id}’, ‘[email protected]’);
Route::get(‘update’, ‘[email protected]’);
});
6、路由别名
#路由别名:同MySQL需要别名因为名字太长或者不好记等情况
//Route::get(‘/jintainwofeichangkaixinsdfadsf’, function() {
// echo ‘test11’;
//});
Route::get(‘/jintainwofeichangkaixinsdfadsf’, [
‘as’ => ‘bieming’,
‘uses’ => function() {
echo ‘我们都不容易’;
}
]);
Route::get(‘/test11’, function() {
// {{ U(’user/index’) }}
// {{ url(‘/jintainwofeichangkaixinsdfadsf’) }}
echo route(‘bieming’); //通过路由别名替换url方法,放到表单action属性中
});
小总结
- 什么是路由:就是网址
- 路由作用:将用户的请求交给指定的控制器方法处理
- 路由在哪:routes\web.php
- 路由语法
- 基 本:Route::HTTP类型(路径,闭包函数或控制器方法)
- 响应指定请求:Route::match([类型,..,类型],路径,闭包函数或控制器方法)
- 响应多有请求:Route::any(路径,闭包函数或控制器方法)
- 路由参数语法
- Route::HTTP类型(路径/{参数},闭包函数或控制器方法)->where(参数,正则)
多个参数:就是写多个{}
多个限制:则where使用数组 [参数=>正则, …, 参数n=>正则n]
- 路由群组
- 概念:就是给多个路由设置相同的属性,减少冗余
- 语法
Route::group([‘namespace’ => ”, ‘preifx’=>”], function(){
写其他路由…
})
- 路由别名
- 概念:就是路由名称太长,则写个别名,后期可以通过方法route获取别名的真实
路由地址
- 语法
Route::请求类型(路径,[
‘as’ => 别名,
‘uses’ => 闭包函数 或者 控制器方法
])
视图1
控制器调用视图
1)语法
- 方法1:return‘字符串’
- 方法2:return view(视图文件,compact(变量名,…,变量名n));
return view加载视图会去resources/views下面找(ps. view所有名称统一小写)
return view(’php12’)会优先找blade模板引擎
如果需要调用resources/views/子目录中的文件则用“.”拼接
2)练习(调用视图)
步骤1:
步骤2:
基本用法视图传参
认识compact函数
- 语法:compact(变量名,….,变量名n)
- 作用:将多个变量组成数组
- 代码:
<?php
$a = ‘h1’;
$b = ‘h2’;
$c = ‘hd’;
$data = compact(‘a’,’b’,’fasdfasd’);
echo ‘<pre>’;
print_r($data);
2)数组方式
3)工作常用
4、【★】blade模板
1)什么是blade模板
- blade模板同smarty模板一样都是PHP模板引擎
- blade模板是laravel自带模板引擎(推荐使用也可以使用原声php)
问:什么是模板引擎
答:就是用PHP写的一个类
问:是个类就是模板引擎吗
答:非也,具备将php代码和html代码分离类称之为模板引擎
2)blade模板标签
- 注释(同Smarty注释响应时不含注释内容)
- 展示变量数据
{{ $变量名 }}
- 循环
@foreach(变量名 as 键=>值)
@endforeach
- 判断
@if ()
@else if ()
@else
@endif
- 指定原声PHP(少用)
@php
@endphp
获取请求输入
1、语法
1)方法1
- 步骤1:导入类【use Illuminate\Http\Request;】
- 步骤2:在控制器方法中声明使用,如
- 步骤3:最后使用下属语法获取数据
- $request->all() 获取所有数据
- $request->input(键 [,默认值]) 获取GET数据
- $request->only([参数名1,…,参数名n]) 获取指定数据
- $request->except([参数名1,…,参数名n]) 获取指定数据外的所有数据
- 查看更多:http://laravelacademy.org/post/6750.html#toc_4
方法2
- 步骤1:导入类【Illuminate\Support\Facades\Input;】
- 步骤2:最后使用下属语法获取数据
- Input::all() 获取所有数据
- Input::get(参数名[,默认值]) 获取单个数据
- Input::only([键1,…,键n]) 获取指定数据
- Input::except([键1,…,键n]) 获取指定数据外的所有数据
2、练习
步骤1:定义路由
步骤2:创建控制器方法
步骤3:创建视图
八、留言板功能
︴准备(数据库初体验,明天详细讲)
- 语法
查询所有数据语法:DB::table(表名)->get()
插入数据语法:DB::table(表名)->insert(关联数组)
- 练习
步骤1:创建数据库和留言表并插入数据
create database laravel54;
use laravel54;
#标准写法
— create table msg (
— id int primary key auto_increment comment ‘编号’,
— uname varchar(45) not null comment ‘用户名’,
— content text not null comment ‘内容’,
— created_at int not null default 0 comment ‘创建于’,
— updated_at int not null default 0 comment ‘更新于’
— )engine=myisam charset=utf8;
#为铺垫后面课程修改
create table msg (
id int primary key auto_increment comment ‘编号’,
uname varchar(45) comment ‘用户名’,
content text comment ‘内容’,
created_at int not null default 0 comment ‘创建于’,
updated_at int not null default 0 comment ‘更新于’
)engine=myisam charset=utf8;
insert into msg values
(null,’a’,’aaaa’,0,0),
(null,’a’,’aaaa’,0,0),
(null,’a’,’aaaa’,0,0);
步骤2:修改laravel数据库配置文件
1、留言列表
1)思路
- 步骤1:定义路由访问列表页(Admin\[email protected])
- 步骤2:创建控制器MsgController和方法index 并且调用视图
- 步骤3:调用视图
- 步骤4:获取数据并循环显示
2)代码
- 步骤1:定义路由访问列表页(Admin\[email protected])
- 步骤2:创建控制器MsgController和方法index 并且调用视图
- 步骤3:调用视图
- 步骤4:获取数据并循环显示
控制器
视图
2、添加留言
1)思路
- 说 明:因为添加特殊(其和列表在同一个页面所以不需要重新加载视图)
- 步骤1:修改路由
- 步骤2:控制器接受数据,并添加到数据库
2)代码
- 步骤1:修改路由
- 步骤2:控制器接受数据,并添加到数据库