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. php如何和linux进行通讯

    FastCGI原理 FastCGI是一个运用于Http Server和动态脚本语言间通信的接口,多数流行的Http Server都支持FastCGI,包括Apache.Nginx和lighttpd等. ...

  2. 一、新建springBoot项目

    三种方式新建SpringBoot项目:  官网,  myeclipse,  idea 1.官方网站新建(https://start.spring.io/) 1)打开官网,选择自己需要的springBo ...

  3. Listen and Write 18th Feb 2019

    Weighted blanket has becomes very popular in many homes. they claim it can provide better sleep and ...

  4. ionic2 vscode运行调试

    一.环境搭建 1,安装ripple模拟器 如果已经注册了淘宝国内镜像使用下面命令 cnpm install -g ripple-emulator 显示结果如下: 2,安装vs code 下载地址htt ...

  5. Win2008服务启动不能调用Office Word的解决方法

    本文为大家分享一下如何解决Windows Server 2008 服务启动不能调用Office Word的问题,分享这个教程的原因是,今天在Windows server2008上部署一个应用时发现了一 ...

  6. [UnityShader基础]06.#pragma multi_compile

    参考链接: https://blog.csdn.net/qq826364410/article/details/81774741 https://docs.unity3d.com/Manual/SL- ...

  7. request.getRealPath为什么会被代替

    以及前两天在网上看到的“不是工程的物理路径封装在Session里 是工程的路径被封装在了ServletContext中的问题” 很抱歉没有找到答案. 只能怪鄙人才识短浅. 在通过这次学习的过程中使我懂 ...

  8. 字符型转换为字符串ToString

    字符型转换为字符串 // C 货币 2.5.ToString("C"); // ¥2.50 // D 10进制数 25.ToString("D5"); // 2 ...

  9. MVC人员管理系统

    基本都要使用C控制器中的两个action来完成操作,一个用于从主界面跳转到新页面.同时将所需操作的数据传到新界面,另一个则对应新界面的按钮,用于完成操作.将数据传回主界面以及跳转回主界面.根据不同情况 ...

  10. azkaban架构介绍

    转自:https://blog.csdn.net/huoji1990/article/details/81911904 官网:https://azkaban.readthedocs.io/en/lat ...