Laravel 学习笔记
1. 简介
2. 运行环境要求
2.1 PHP版本 >= 5.5.9
2.2 Mcrypt PHP 扩展 --------------------------php的加密扩展,提供多种加密算法
2.3 openssl扩展 ---------------------------------对传输的数据进行加密
2.4 mbstring扩展 --------------------------------mbstring扩展库用于处理多字节字符串,全称是Multi-Byte String 即各种语言都有自己的编码,他们的字节数是不一样的,目前php内部的编码只支持ISO-8859-*, EUC-JP, UTF-8,其他的编码的语言是没办法在php程序上正确显示的,解决的方法就是通过php的mbstring函数库来解决。
2.5 Tokenizer PHP扩展 ------------------------php代码解析
3. 安装
首先得进到想要安装的目录下再执行:
composer create-project laravel/laravel blog01 --prefer-dist “5.1.*”(blog01为项目名)
4. 配置
5. 路由:
5.1 文件位置:app/Http/routes.php
5.2 基本路由:
Route::get('/seeting', function(){ return '测试' ; });
Route::post('/insert', function(){ return '测试' ; });
Route::put(........);
Route::delete(...);
5.3 带参数的路由
5.4 传递多个参数
5.5 路由别名
5.6 路由组设置
5.7 404页面设置
6. 中间件
6.1,在项目根目录下使用:php artisan make:middleware AdminMiddleware 中间件名称Middleware命令创建中间件
创建中间件 php artisan make:middleware AdminMiddleware 中间件名字(AdminMiddleare)
6.2,在中间件中写下规则,主要就是进行判断是否登录,当然也别忘了引入命名空间,如下例:
public function handle($request, Closure $next)
{
//判断是否登陆,如未登录则重定向到登陆页
if(empty(\Session::get('admin'))) {
return redirect('/login');
}
//如已登陆则执行下一步
return $next($request);
}
6.3,在 Kemel.php 文件中中间件添加到局部中间件中,如下例:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
//添加的中间件 Admin
'Admin' => \App\Http\Middleware\AdminMiddleware::class,
];
6.4, 在路由里加入中间件,除了登录、注册和执行登录方法写到中间件外面,其余的方法都应该写入到中间件里面,如下例:
Route::group(['domain' => 'www.wang.com'], function () {
//登陆 写在中间件外面
Route::resource('index','User\UserController');
//注册 写在中间件外面
Route::resource('create','User\UserController@create');
//执行登陆 写在中间件外面
Route::resource('login','User\UserController@login');
//验证是否登陆中间件
Route::group(['middleware' => 'Admin'],function(){
//列表
Route::resource('show','User\UserController@show');
//修改
Route::resource('edit','User\UserController@edit');
//执行修改
Route::resource('update','User\UserController');
//删除
Route::resource('destroy','User\UserController@destroy');
});
});
7. 控制器
7.1 创建控制器
php artisan make:controller UserController
或者(不创建方法 )
php artisan make:controller UserController --plain
7.2 路由以及访问
7.2.1 普通访问
//当用户请求服务器上的/controller路径时,会执行UserController控制器中的show方法
Route::get('/controller','UserController@show');
7.2.2 带参数访问
//1.route.php
//用户的修改
Route::get('user/edit/{id}','UserController@edit');
//2.UserController.php
public function edit($id)
{
echo '这里是用户的修改操作。。。要修改用户的id为'.$id
}
7.2.3 别名
//1.route.php
//用户的删除操作
Route::get('/admin/user/delete/{id}',['as'=>'udelete','uses'=>'UserController@delete']);
//2.UserController.php
public function delete()
{
echo route('udelete',['id'=>100]);
}
7.2.4 中间件控制
//1.route.php 用户的升级操作
Route::get('/user/shengji',[
'middleware'=>'login',
'uses'=>'UserController@shenji'
]);
//UserController.php
//用户的升级操作
public function shengji()
{
echo '这是用户的升级操作。。。';
}
或者
Route::get('user/jinyong','UserController@jinyong')->middleware('login');
//UserController.php
//用户的禁用操作
public function jinyong()
{
echo '这是用户的禁用操作。。。';
}
7.2.5 隐式控制器
//隐式控制器 如果是goods开头的路径 都是交给GoodsController来实现
Route::controller('goods','GoodsController');
//GoodsController.php
//方法前面带请求方式,并且是驼峰命名
public function getAdd()
{
return view('add');
}
public function getShow()
{
echo '商品的显示操作。。。'
}
//商品的插入操作
public function postInsert()
{
echo '商品的插入操作';
}
//add.blade.php
<!--add.blade.php-->
<!--csrf_field()隐藏域-->
<body>
<form action="/goods/insert" method="post"> <input type="text" name="username">
<input type="text" name="username">
{{csrf_field()}}
<button>点击添加</button>
</form>
</body>
总结:
隐式控制器的使用方法:
a)创建路由规则
Route::Controller('goods','GoodsController')
b)GRT/goods/add HTTP/1.1
这个时候会执行 GoodsController下的getAdd方法
POST/goods/insert HTTP/1.1
这个时候会执行 GoodsController下的postInsert方法
7.2.6 restful控制器路由(匹配7个路由规则)
//route.php
//restful控制器路由
Route::resource('article','ArticleController'); //ArticleController.php
//GET /article HTTP/1.1
public function index()
{
echo '这里是文章显示的首页。。';
}

8. 控制器
8.1 基本信息获取
获取请求方法
$request->method();
检测方法
$request->isMethod('post');
请求路径
$request->path();
获取完整url
$request->url();
获取ip
$request->ip();
获取端口
$request->getPort();
8.2 提取请求参数
8.2.1 基本获取
//8.2.1基本获取
$username = $request->input('username');
$password = $request->input('password');
8.2.2 设置默认值
//若传参了则用传递的参数,否则用默认值
$res = $request-.input('vip',10);
var_dump($res);
8.2.3 检测请求参数是否存在
$res = $request->has('username');
var_dump($res);
8.2.4 获取所有的请求参数
$res = $request->all();
var_dump($res);
8.2.5 提取部分
//提取需要的
$res = $request->only(['username','password']); //剔除不需要的参数 $res = $request->except(['username','password']);
var_dump($res);
8.2.6 获取请求头信息
//$res = $request->header('Connection');
//$res = $request->header('cache-Control');
//$res = $request->header('Cookie');
var_dump($res);
8.3 文件操作
8.3.1 检测文件是否上传
$request->hasFile('photo');
8.3.2 将文件移动到指定位置
$request->file('photo')->move('./uploads/','bg.jpg');
//案例
//route.php
Route::get('/file','UserController@show')
Route::post('/upload','Controller@upload') //UserController.php
public function show()
{
return view('upload');
}
//文件上传
public function upload(Request $request)
{
//检测文件是否上传
//$res = $request->hasFile('profile');
//php脚本中相对路径,都是相对于当前正在请求的文件。(public/index.php)
if($request->hasFile('profile')){
$request->file('profile')->move('./upload','liuyan.jpg');
}
} //upload.blade.php
<form action="/upload" method="post" enctype="multipart/form-data">
头像<input type="file" name="profile"/>
{{csrf_filed()}}
<button>点击上传</button>
</form>
8.4 cookie操作
8.4.1 设置
1. \Cookie::queue('name','iloveyou',10);
2. return response('haha')->withCookie('uid',10,10);
8.4.2 读取
1. \Cookie::get('name');
2. $request->cookie('name');
//cookie操作
Route::get('/cookie','UserController@cookie'); //UserController.php
public function cookie(Request $request)
{
//写入cookie,时间单位为分钟
//第一种
// \Cookie::queue(‘name’,'xdl',20);
//第二种
//return response('')->withCookie('xqq','zhenhao',5); //读取
//第一种
$res = \Cookie::get('name');
//第二种
$res = $resquest->cookie('xqq');
var_dump($res);
}
8.5 闪存信息
8.5.1 将所有的请求写入闪存中
$request->flash();
8.5.2 将部分参数写入闪存中
$request->flashOnly('title','price');
8.5.3 除去某些参数之外的参数
$request->flashExcept('_token');
8.5.4 自定义闪存
\Session::flash('name','xiaohigh');
//闪存的演示 //route.php
Route::get('/flash','UserController@flash');
Route::post('flash','UserController@doflash');
Route::get('/old','UserController@old');
//UserController.php publlic function flash() { return view('flash'); }
public function doflash(Request $request)
{
//var_dump($request->all());
$request->flash();//将请求过来的参数都闪存起来
//若发现参数不对,则跳转到原来的页面重新填写参数
return back();
}
public function old()
{
var_dump(old('username'));
}
//flash.blade.php
<form action="/flash" method="post">
用户名:<input type="text" name="username" value="{{old('username')}}"><br>
密码:<input type="text" name="password" value="{{old('password')}}"><br>
年龄<input type="text" name="age" value="{{old('age')}}">
{{csrf_filed()}}
</form>
9.响应
9.1 返回字符串
return ‘哈哈哈哈’;
9.2 设置cookie
//cookie的名字,值,生命周期
return response('name')->withCookie('id',20,60);
9.3 返回json
return response()->json(['a'=>100,'b'=>2000]);
9.4 下载文件
return response()->download('web.config');
9.5 页面跳转
return redirect('/goods/add');
9.6 显示模板
return response()->view('goods.add');
//设置返回内容并跳转
return '支付成功!3s后页面跳转。。<script>
setTimeout(function(){
location.href="/form"
},3000)
</script>'
10. 视图
10.1 解析模板 view('user.add');
10.2 分配数据到模板 view('user.edit',['username'=>'admin']);
10.3 模板引擎blade
10.3.1 模板的默认存放位置 resources/views
10.3.2 使用变量 {{$username}}
10.3.3 使用函数 {{time()}}
10.3.4 使用默认值 {{ $username or 'guest' }}
10.3.5 显示html代码 {!! $name !!}
10.3.6 引入子视图 @include('header')
10.3.7 模板继承
10.3.7.1 占位符
1.@yield('title')
2.@section('content')
3.@show
10.3.7.2 新模板内容
1.@extends('index')
2.@section('title','new Title')
3. @section('content')
new contents is here
@endsection
10.3.8 流程控制
//流程控制
//route.php
Route::get('/liucheng','UserController@liucheng'); //UserController.php
public function liucheng()
{
return view('control.liucheng',['total'=>100]);
} //liucheng.blade.php
给你买
@if($total >= 90 && $total <= 100)
游戏机
@elseif($total <= 90 && $total >= 60)
信纸
@endif
10.3.9 循环控制
//for循环
@for($i=0;$i<10;$i++)
the current value is {{ $i }}
@endfor //foreach循环
@foreach($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
注:sublime搜索文件 ctrl+p,可以直接搜索报错的编译文件
11. 数据库操作
11.1 支持的数据库类型
11.1.1 MysQL
11.1.2 Postgres
11.1.3 SQLite
11.1.4 SQL Server
11.2 数据库连接配置
11.2.1 文件位置 config/database.php
11.2.2 结果集的返回类型 ‘fetch’=>PDO::FETCH_ASSOC
11.2.3 .env环境快速配置
11.3 数据库基本操作
11.3.1 查询 DB::select
11.3.2 插入 DB::insert
11.3.3 更新 DB::update
11.3.4 删除 DB::delete
11.3.5 一般语句 DB::statement('drop table users');
11.3.6 事务操作
1. DB::beginTransaction 2. DB::rollBack() 3. DB::commit()
//开启事务
DB::beginTransaction();
//扣钱
$res1= DB::update("update user set account = account -2000 where id = 1");
//加钱
$res2 = DB::update("update user set account = account + 2000 where id = 2");
if($res1 && $res2){
//事务提交
DB::commit();
echo '转账成功!';
}else{
//事务回滚
DB::rollback();
echo '转账失败!';
}
11.3.7 操作多个数据库 DB::connection('foo')->select(...)


11.4 构造器
11.4.1 增删改查
//数据库操作
Route::get('/db','UserController@db'); //UserController.php
use DB;
public function db()
{
//查询
//$res = DB::select("select * from goods where id < 50");
//$res = DB::select('select * from goods where id = ?', [20]);
//插入
//$res = DB::insert('insert into goods (title, cid, price, pic, color, size, cname) Values("最新的秋裤",3,20,”3.jpg“,"红色","XXL","裤子")');
$res = DB::insert("insert into good_test (title,price)values(?,?)",["最新的文化衫",20]);
echo '<pre>';
var_dump($res)
}
//查询构造器
Route::get('/builder','UserController@builder'); //UserController.php
public function builder()
{
//插入动作
$res = DB::table('user')->insert([
'username'=>'lampbrother',
'password'=>'lampbrother',
'account'=>20000
]);
dd($res);
}
11.4.1.1 插入
1 单条
DB::table('users')->insert(['email'=>'john@displore.com','coins'=>0]);
2 多条
DB::table('users')->insert(['email'=>'elsa@displore.com','coins'=>0],
['email'=>'anna@displore.com','coins'=>0]
);
3 获取id插入
$id = DB::table('users')->insertGetId(['email'=>'tom@displore.com','coins'=>0]); 11.4.1.2 更新
DB::table('users')->where('id',1)->update(['votes'=>1]); 11.4.1.3删除
DB::table('users')->where('id','=',12)->delete(); 11.4.1.4 查询
1.查询单条数据
$res = DB::table('user')->first(); 2.查询多条
$res = DB::table('user')->get(); 3.获取单个结果中的某个字段值
$res = DB::table('user')->value('username'); 4.获取结果集中某个字段的所有值
$res = DB::table('user')->lists('username');
dd($res);
11.4.2 连贯操作
1.设置字段查询
$res = DB::table('users')->select('username','password')->get();
2.设置条件
$res = DB::table('user')->where('username','=','xqq')->get(); $res = DB::table('user')->where('coins','>',100)->orWhere('name','=','elsa')->get(); $res = DB::table('users')->whereBetween('coins',[1,100])->get(); $res = DB::table('users')->whereIn('id',[1,2,3])->get();
dd($res); 2.排序
$res = DB::table('user')->orderBy('id','desc')->get(); 3.分页
$res = DB::table('user')->skip(5)->take(4)->get(); 4.连接表
$res = DB::table('good_test')
->leftJoin('cate','cate.id','=','good_test.cid')
->where('good_test.gid','<',20)
->get(); 5.计算
//总数
$res = DB::table('users')->count();
//最大值
$res = DB::table('good_test')->max('price');
//平均值
$res = DB::table('good_test')->avg('price');
11.5 sql语句记录
//在路由中加入一下路由,则会把sql语句显示在浏览器中
Event::listen('illuminate.query',function($query){
var_dump($query);
});
11.6 数据库迁移
简单介绍:Laravel框架管理数据库结构的一种方式
功能:实现表结构的共享
使用:
//创建类文件
php artisan make:migration test //up方法
1.创建表
Schema::create('test',function(Blueprint $table){});
2.创建表字段
主键字段 $table->increments('id');
字符串字段 $table->string('username');
整形 $table->integer('age');
浮点型 $table->float('weight');
文本类型 $table->text('intro'); 3.设置引擎
php artisan migrate
11.7 数据填充
11.7.1 介绍:是laravel中一个快速向 数据库插入测试数据的方法
11.7.2 使用
11.7.2.1 套路一
1.创建注入文件(文件默认在database/seed)
php artisan make:seeder user 2. 在文件中填写注入代码
例如:
public function run()
{
$arr = [];
//循环
for($i=0;$i<20;$i++){
$tmp = [];
$tmp['username'] = str_random(20);
$tmp['password'] = str_random(20);
$tmp['group_id'] = rand(1,10);
$tmp['email'] = rand(100000,999999).'@qq.com';
$tmp['sex'] = rand(0,1);
$tmp['age'] = rand(10,60);
//压入到数组中
$arr[] = $tmp;
}
//插入
DB::table('test')->insert($arr);
} 3. 运行指令
php artisan db:seed --class=user
11.7.2.2 套路二
1. 创建注入文件
php artisan make:seeder PostSeeder 2. 在文件中书写注入代码
public function run()
{
$data = [];
for($i=0;$i<30;$i++){
$tmp = [];
$tmp['title'] = str_random(20);
$tmp['content'] = str_random(100);
$tmp['created_at'] = data('Y-m-d H:i:s');
$tmp['updated_at'] = data('Y-m-d H:i:s');
$data[] = $tmp;
}
DB::table('posts')->insert($data);
} 3. 在DatabaseSeeder文件中添加代码
$this->call(PostSeeder::class); 4. 运行指令 php artisan db:seed
12. 设置自定义函数和自定义类文件
1. 自定义文件 app/library/helper.php 2. 在项目的composer.json中添加信息
“autoload”:{
"classmap":[
"database"
],
"psr-4":{
"APP\\":"app/"
},
"files":[
"app/Library/helper.php"
]
}, 3. 执行命令
composer dump-auto
13. 调试工具
13.1 debugbar安装
1. composer require barryvdh/laravel-debugbar 2. 在config/app.php 里面的providers添加Barryvdh\Debugbar\ServiceProvider::class,
13.2 chrome插件postman
翻墙到谷歌应用商店安装postman插件
Laravel 学习笔记的更多相关文章
- Laravel学习笔记(三)--在CentOS上配置Laravel
在Laravel框架上开发了几天,不得不说,确实比较优雅,处理问题逻辑比较清楚. 今天打算在CentOS 7上配置一个Laravel,之前都是在本机上开发,打算实际配置一下. 1)系统 ...
- Laravel学习笔记之Session源码解析(上)
说明:本文主要通过学习Laravel的session源码学习Laravel是如何设计session的,将自己的学习心得分享出来,希望对别人有所帮助.Laravel在web middleware中定义了 ...
- Laravel学习笔记之PHP反射(Reflection) (上)
Laravel学习笔记之PHP反射(Reflection) (上) laravel php reflect 2.1k 次阅读 · 读完需要 80 分钟 3 说明:Laravel中经常使用PHP的反 ...
- 慕客网laravel学习笔记
session中set方法使用 Session::set('user.username.age','18')嵌套使用得出$user = ['username'=>['age'=>18]]; ...
- laravel 学习笔记 — 神奇的服务容器
2015-05-05 14:24 来自于分类 笔记 Laravel PHP开发 竟然有人认为我是抄 Laravel 学院的,心塞.世界观已崩塌. 容器,字面上理解就是装东西的东西.常见的变量.对象属 ...
- Laravel学习笔记(一)安装配置开发环境
摘要 Laravel的目标是给开发者创造一个愉快的开发过程,并且不牺牲应用的功能性.快乐的开发者才能创造最棒的代码!为了这个目的,开发者博取众框架之长处集中到Laravel中,这些框架甚至是基于Rub ...
- Laravel 学习笔记 —— 神奇的服务容器 [转]
容器,字面上理解就是装东西的东西.常见的变量.对象属性等都可以算是容器.一个容器能够装什么,全部取决于你对该容器的定义.当然,有这样一种容器,它存放的不是文本.数值,而是对象.对象的描述(类.接口)或 ...
- Laravel学习笔记(二)
解决了类自动加载的问题,剩下的问题就是看文档了,laravel的官方文档虽然简单,但是却包含了很多基础知识,学习Laravel最好先看看官方文档,我感觉帮助很大,因为laravel框架的源码看起来并不 ...
- Laravel学习笔记(一)
根据国外的调查,Laravel是最流行的框架,最近公司需要PHP的开发人员,但是一直招不到人,只好亲自上阵研究一下.由于以前对PHP只是大致了解,这次学习开始的时候也挺挠头的,到今天稍微入了 ...
- Laravel学习笔记之Session源码解析(下)
说明:在中篇中学习了session的CRUD增删改查操作,本篇主要学习关闭session的相关源码.实际上,在Laravel5.3中关闭session主要包括两个过程:保存当前URL到session介 ...
随机推荐
- 2018-2019-2 20175227张雪莹《Java程序设计》实验三 《敏捷开发与XP实践》
2018-2019-2 20175227张雪莹<Java程序设计> 实验三 <敏捷开发与XP实践> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号: ...
- Tree Traversals Again
An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example ...
- mysql常规巡检
mysql常规巡检 目录 一.巡检脚本 二.下载巡检脚本 三.脚本执行说明 1.inspection.conf 使用说明 2.inspection_mysql.sh 使用说明 3.mysqltun ...
- centos上 小程序部署 nginx+https+ssL 提示错误:对应的服务器 TLS 为 TLS 1.0 ,小程序要求的 TLS 版本必须大于等于 1.2
解决办法: 1.nginx版本必须是1.0.6以上 2.修改配置文件,修改server内的ssl_protocols内容,增加TLSv1.2 3.重启nginx. ./nginx -s reload ...
- Ehcart整合百度地图
最近上班有些时间,学习了一下Ehcart的知识,自己制作了一份Ehcart整合百度地图的示例代码. GItHub地址:https://github.com/TianYanFd/tianjin-powe ...
- SN Writer 写号工具使用
SN Writer 写号工具的使用 蓝牙写号: 打开SN Writer 写号工具 1.点击System Config按钮 2.进入界面,选择需要写号的类型,及选择相应的写号文件, ...
- oracle入坑日记<六>自增列创建和清除(含序列和触发器的基础用法)
0 前言 用过 SQLserver 和 MySQL 的自增列(auto_increment),然而 Oracle 在建表设置列时却没有自增列. 查阅资料后发现 Oracle 的自增列需要手动编写. ...
- 前端人员使用notepad++基本配置
截图说明: 以上截图说的很明确了,基本满足基本的开发. notepad++前端配置版支持Emmet快速完成:支持Explorer目录管理:支持cmd控制台命令:支持MarkDown编辑预览:其他想用的 ...
- 如何用Fiddler手机抓包
截获智能手机发出的HTTP包有什么用? 用处一: 手机软件程序员利用Fiddler,可以截获手机发出的HTTP包, 从而调试程序: 用处二: 软件测试人员用于测试智能手机上的软件: 用处三: 可以用来 ...
- QTP测试.NET程序的时候,ComboBox下拉框控件选择后,运行时对象不可见解决方案
解决方法: 录制时,选择下拉框数据的时候,不要鼠标单击选择,而是要用ENTER(回车键)来选择,才能完成选择,这样录制就OK了.