一、laravel简介
laravel是一套优雅简介的PHP开发框架,受欢迎程度非常之高,功能强大,工具齐全;以下是本人在学习过程中记录的laravel比较基础的资料,权当学习笔记,请大神们多多指教
二、版本选择
本篇学习笔记以laravel5.2.15版本为框架的版本基础;更多版本请移步https://www.golaravel.com/
三、laravel下载安装以及开发环境搭建
(一):环境搭建
由于laravel使用较多的php新特性,所以新版本的laravel对PHP的版本要求比较高,这里选择的laravel5.2.15要求 PHP>5.5.9+ 。Win系统下推荐使用集成的开发环境比如wamp、phpStudy、Xampp都可以,下载安装的时候需要注意PHP版本,Linux系统下需要编译安装,这里推荐一篇博客https://www.linuxidc.com/Linux/2016-10/136327.htm(ubuntu下lamp开发环境搭建)。本篇学习笔记也是基于lamp环境下
(二):下载、安装及大致介绍
1、安装包下载安装
原本laravel中文网是可以下载一键安装包的,但是等我去下载的时候发现没地方可以下载,也只能通过度娘找其它下载资源下载安装包然后安装;我的资源:https://github.com/yuwenbo5/laravel5.2.15.git;下载安装包后解压更改名称(laravel),直接拷贝到环境根目录www(win下wamp环境)或者 /var/www/html(linux下lamp环境)中;打开浏览器输入url:localhost/laravel/public 然后回车,出现如下画面表示安装成功:
2、composer安装
cd到环境根目录,使用命令:composer create-project --prefer-dist laravel/laravel=5.2.15 laravel(项目名称,可修改)
3、简单介绍
laravel是基于mvc模式的php框架,m——模型层,v——视图层,c——控制器层;以下为laravel框架的目录文件,框出来的文件目录将在后续中用到:
app是应用的核心代码文件目录,以后的代码基本都在这里完成;app/Http/Controller目录是应用的控制器文件;routes.php是框架的路由文件,负责路由分配和映射;Http下的类文件,比如上面目录中的User.php、Menu.php文件是应用的模型文件;config目录是所有应用的配置文件目录;public是框架的入口文件及静态资源文件目录;resources/views则是应用的视图文件目录。
四、laravel路由
(一):简介
用过thinkPHP的开发者都知道,传统的MVC的url都是对应应用的控制器及控制器中的方法,laravel中的MVC则是通过路由功能映射到对应的程序(控制器方法),通过路由将用户的请求发送到对应的程序进行处理,其作用就是建立url和处理程序之间的映射关系,这样做有一个好处,对url进行美化只需要修改路由而无需对程序本身进行修改。
laravel中请求类型包括:get、post、put、patch、delete。
前面说了route.php是laravel的路由文件,所有的路由映射都要通过编辑route.php文件进行代码书写。
(二):路由学习
1、基本路由
get请求:
1 <?php 2 3 //基本路由的get请求 4 5 Route::get('get_base', function(){ 6 return 'get request base'; 7 }); 8 9 10 浏览器输入:http://127.0.0.1/laravel/public/get_base 11 页面输出:get request base
post请求:
1 <?php 2 3 //基本路由的post请求 4 5 Route::post('post_base', function(){ 6 return 'post request base'; 7 }); 8 9 10 以上路由需要通过post方式请求,这里不做演示 11 请求后页面输出:post request base
2、多请求路由
顾名思义,多请求路由则是可以通过多种请求方式进行请求,多请求路由主要有两种方式,match和any
(1)、match接收请求类型的数组从而限定请求的类型:
1 <php 2 3 //多请求路由match 4 5 Route::match(['get','post'], 'multi', function(){ 6 return 'multi post or get'; 7 }); 8 9 url:http://127.0.0.1/laravel/public/multi 10 此路由可通过get、post请求 11 请求后返回字符串:multi post or get
(2)、any方式
1 <?php 2 3 //any方式 4 5 Route::any('multi', function(){ 6 return 'multi get or post'; 7 }); 8 9 10 url:http://127.0.0.1/laravel/public/multi 11 请求返回字符串:multi get or post
3、路由参数
给路由绑定参数,接收参数进行处理
(1)、必选参数
1 <?php 2 3 //带参数的路由 4 5 Route::get('myname/{name}', function($name){ 6 return 'my name is '.$name; 7 }); 8 9 10 url:http://127.0.0.1/laravel/public/myname/yuwenbo 11 get访问后页面输出:my name is yuwenbo
(2)、可选参数($userid=null表示默认值,可设置没有参数时的默认值)
1 <?php 2 3 //可选参数绑定 4 5 Route::get('user/{userid?}', function($userid=null){ 6 return 'userid is '.$userid; 7 }); 8 9 访问url:http://127.0.0.1/laravel/public/user/username 10 输出:userid is username 11 12 访问url:http://127.0.0.1/laravel/public/user 13 输出:userid is 14 15 可选参数绑定使得路由很灵活
(3)、路由参数过滤(用正则表达式对传入的参数进行过滤)
1 <?php 2 3 /* 4 参数过滤 5 */ 6 7 //单个参数过滤 8 Route::get('num/{num?}', function($num=15){ 9 return 'this num is '.$num; 10 })->where('num','[0-9]+'); 11 12 访问url:http://127.0.0.1/laravel/public/num/5 13 返回输出:this num is 5 14 15 访问url:http://127.0.0.1/laravel/public/num 16 返回输出:this num is 15 17 18 访问url:http://127.0.0.1/laravel/public/num/fhdja 19 页面报错 20 21 //多个参数过滤 22 Route::get('info/{name}/{age?}', function($name,$age=null){ 23 return 'name is '.$name.', age is '.$age; 24 })->where(['name' => '[a-zA-Z]+', 'age' => '[1-9]+']); 25 26 可使用数组形式过滤多个参数
4、路由别名
给路由通过['as' => 'alias']数组使用别名后,可通过route('别名')生成url,请看代码理解:
1 <?php 2 3 //路由别名 4 5 Route::get('student/info',['as' => 'studentInfo' ,function(){ 6 7 //通过route('studentInfo')生成完成url后返回 8 return route('studentInfo'); 9 10 }]); 11 12 13 访问url:http://127.0.0.1/laravel/public/student/info 14 页面返回:http://127.0.0.1/laravel/public/student/info 15 16 注:别名的好处在于,以后在控制器中使用route('别名')的方式生成url后,即便修改了路由的名字,也不用再修改控制器程序,因为通过别名程序能自动生成修改后的url
5、路由群组
通过关键字group创建路由群组
1 <?php 2 3 /* 4 *路由群组 5 */ 6 7 Route::group(['prefix' => 'admin'], function(){ 8 9 //此时的访问地址:http://127.0.0.1/laravel/public/admin/student/info 10 Route::get('student/info',['as' => 'studentInfo' ,function(){ 11 return route('studentInfo'); 12 }]); 13 14 //此时的访问地址:http://127.0.0.1/laravel/public/admin/info/yuwenbo/20 15 Route::get('info/{name}/{age?}', function($name,$age=null){ 16 return 'name is '.$name.', age is '.$age;