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 学习笔记的更多相关文章

  1. Laravel学习笔记(三)--在CentOS上配置Laravel

    在Laravel框架上开发了几天,不得不说,确实比较优雅,处理问题逻辑比较清楚.     今天打算在CentOS 7上配置一个Laravel,之前都是在本机上开发,打算实际配置一下.     1)系统 ...

  2. Laravel学习笔记之Session源码解析(上)

    说明:本文主要通过学习Laravel的session源码学习Laravel是如何设计session的,将自己的学习心得分享出来,希望对别人有所帮助.Laravel在web middleware中定义了 ...

  3. Laravel学习笔记之PHP反射(Reflection) (上)

    Laravel学习笔记之PHP反射(Reflection) (上) laravel php reflect 2.1k 次阅读  ·  读完需要 80 分钟 3 说明:Laravel中经常使用PHP的反 ...

  4. 慕客网laravel学习笔记

    session中set方法使用 Session::set('user.username.age','18')嵌套使用得出$user = ['username'=>['age'=>18]]; ...

  5. laravel 学习笔记 — 神奇的服务容器

     2015-05-05 14:24 来自于分类 笔记 Laravel PHP开发 竟然有人认为我是抄 Laravel 学院的,心塞.世界观已崩塌. 容器,字面上理解就是装东西的东西.常见的变量.对象属 ...

  6. Laravel学习笔记(一)安装配置开发环境

    摘要 Laravel的目标是给开发者创造一个愉快的开发过程,并且不牺牲应用的功能性.快乐的开发者才能创造最棒的代码!为了这个目的,开发者博取众框架之长处集中到Laravel中,这些框架甚至是基于Rub ...

  7. Laravel 学习笔记 —— 神奇的服务容器 [转]

    容器,字面上理解就是装东西的东西.常见的变量.对象属性等都可以算是容器.一个容器能够装什么,全部取决于你对该容器的定义.当然,有这样一种容器,它存放的不是文本.数值,而是对象.对象的描述(类.接口)或 ...

  8. Laravel学习笔记(二)

    解决了类自动加载的问题,剩下的问题就是看文档了,laravel的官方文档虽然简单,但是却包含了很多基础知识,学习Laravel最好先看看官方文档,我感觉帮助很大,因为laravel框架的源码看起来并不 ...

  9. Laravel学习笔记(一)

         根据国外的调查,Laravel是最流行的框架,最近公司需要PHP的开发人员,但是一直招不到人,只好亲自上阵研究一下.由于以前对PHP只是大致了解,这次学习开始的时候也挺挠头的,到今天稍微入了 ...

  10. Laravel学习笔记之Session源码解析(下)

    说明:在中篇中学习了session的CRUD增删改查操作,本篇主要学习关闭session的相关源码.实际上,在Laravel5.3中关闭session主要包括两个过程:保存当前URL到session介 ...

随机推荐

  1. [STM31F103]独立看门狗

    独立看门狗步骤: l 取消寄存器写保护: n IWDG_WriteAccessCmd(); l 设置独立看门狗的预分频系数,确定时钟: n IWDG_SetPrescaler(); l 设置看门狗重装 ...

  2. docker(ce) on Ubuntu

    Note: # - requires given linux commands to be executed with root privileges either directly as a roo ...

  3. 【转载】 github vue 高星项目

    内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element ★13489 - 饿了么出品的Vue2的web UI工具套件 Vux ★8133 - 基于Vue和 ...

  4. C++实现串口的自动识别

    1.首先需要遍历注册表得到所有可用的串口 将得到的每一个串口保存到向量vector中,代码如下: // 得到所有的串口号 vector<string> cnComm::getComPort ...

  5. Python笔记:编码问题

    1. python2的编码: python2中使用的是ASCII码,所以不支持中文,如果要在python2中写入中文编码,需要在文件头编写: #-*- encoding:utf-8 -*- 2. 不同 ...

  6. 【HDFS API编程】图解客户端写文件到HDFS的流程

  7. 文件服务之二:ftp协议

    FTP连接 命令连接 传输命令(客户端发给服务端的命令),服务端的21/tcp 数据连接 传输数据(传输数据时建立,数据传输完拆除) 数据链接的建立方法:主动.被动 主动模式(PORTstyle服务器 ...

  8. ajax入门基础

    一.简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 是一种用于创建快速动态网页的技术. AJAX通过在后台与 ...

  9. 树莓派3使用openSUSE Ports 42.3 驱动GPIO注意事项

    安装好opensuse 42.3以后,安装wiringPi库. 由于/proc/cpuinfo文件缺少“Hardware”信息,导致出现如下错误: Oops: Unable to determine ...

  10. ServletContextListener中的方法contextInitialized执行了两次

    有一个web06项目是直接拷贝web05的,复制过后web06项目默认的web配置中的Context Root还是web05,导致tomcat在启动时还是会创建两个web应用,修改成web06后,cl ...