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' => AppHttpMiddlewareAuthenticate::class,
         'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
         'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
         //添加的中间件 Admin
         'Admin' => AppHttpMiddlewareAdminMiddleware::class,
     ];
 
 6.4, 在路由里加入中间件,除了登录、注册和执行登录方法写到中间件外面,其余的方法都应该写入到中间件里面,如下例:
 
     Route::group(['domain' => 'www.wang.com'], function () {
         //登陆 写在中间件外面
         Route::resource('index','UserUserController');
         //注册 写在中间件外面
         Route::resource('create','UserUserController@create');
         //执行登陆 写在中间件外面
         Route::resource('login','UserUserController@login');
         //验证是否登陆中间件
         Route::group(['middleware' => 'Admin'],function(){
             //列表
             Route::resource('show','UserUserController@show');
             //修改
             Route::resource('edit','UserUserController@edit');
             //执行修改
             Route::resource('update','UserUserController');
             //删除
             Route::resource('destroy','UserUserController@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添加BarryvdhDebugbarServiceProvider::class,

13.2 chrome插件postman

FQ到谷歌应用商店安装postman插件

原文地址:https://www.cnblogs.com/qjykn/p/10250027.html