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
FQ到谷歌应用商店安装postman插件
posted on 2019-01-10 14:57 长相思兮长相忆ing 阅读(354) 评论(0) 编辑 收藏 举报