laravel 5.1框架的日常使用笔记

[TOC]

一、laravel下载安装

下载地址:http://www.golaravel.com/
下载版本:v5.2.15
安装环境:php5.5

1) 将解压目录放进根目录laravelstudy中
2) www.laravelstudy.com/laravel/public  =>  可以看见 laravel 5 (安装成功)

二、laravel目录介绍

app             核心目录
bootstrap       框架启动、自动加载配置
config          所有文件的配置
database        数据库相关
public          入口文件、项目静态资源文件
resources       视图文件
storage         编译后的模板文件、日志文件、缓存文件
tests           单元测试目录
vendor          composer加载的依赖文件

三、laravel路由和MVC

传统的MVC中请求的一般是控制器,laravel中请求的是路由

laravel中的路由简单的说就是将用户的请求转发给相应的程序进行处理,作用就是建立url和程序之间的映射

路由请求类型get、post、put、patch、delete

基本路由:
    路由文件  app/Http/routes.php

    get方式:
        Route::get('basic1', function () {
            return 'basic1';
        });
        测试地址 http://www.laravelstudy.com/laravel/public/basic2
        测试结果 basic1

    post方式:
        Route::post('basic2', function () {
            return 'basic2';
        });

        测试地址 post不能通过url访问

    match方式:
        Route::match(['get', 'post'], 'multy1', function () {
            return 'multy1';
        });
        测试地址 http://www.laravelstudy.com/laravel/public/multy1
        测试结果 multy1

    any方式:
        Route::any('multy2', function () {
            return 'multy2';
        });
        测试地址 http://www.laravelstudy.com/laravel/public/multy2
        测试结果 multy2

路由参数:
    Route::get('user/{id}', function ($id) {
        return $id;
    });
    测试地址 http://www.laravelstudy.com/laravel/public/user/3
    测试结果 3

    Route::get('user/{name?}', function ($name = 'default') {
        return $name;
    });
    测试地址 http://www.laravelstudy.com/laravel/public/user
    测试结果 default

    测试地址 http://www.laravelstudy.com/laravel/public/user/xiaodong
    测试结果 xiaodong

    还可以使用正则匹配
    Route::get('user/{name?}', function ($name = 'default') {
        return $name;
    })->where('name', '[A-Za-z]+');

路由别名:
    给当前的路由设置别名,不管url如何变化,route函数都能正确获取到url
    Route::get('user/gerenzhongxin', ['as' => 'center', function () {
        return route('center');
    }]);
    测试地址 http://www.laravelstudy.com/laravel/public/user/gerenzhongxin
    测试结果 http://www.laravelstudy.com/laravel/public/user/gerenzhongxin

路由群组:
    给当前的路由设置前缀
    Route::group(['prefix' => 'member'], function () {
        Route::get('name', function () {
            return 'name';
        });

        Route::any('age', function () {
            return 'age';
        });
    });
    测试地址 http://www.laravelstudy.com/laravel/public/member/name
    测试结果 name

    测试地址 http://www.laravelstudy.com/laravel/public/member/age
    测试结果 age

路由输出视图:
    view方法用于输出视图文件
    Route::get('index', function () {
        return view('index');
    });

通过a链接传递参数:
    

    Route::any('/participle/aid/{id}', 'ParticipleController@select');

    public function select($id){
        echo $id;
    }

四、laravel控制器

1、怎么新建一个控制器
    例子(1)
        新建一个控制器类:
        app/Http/Controllers/MemberController.php
            namespace App\Http\Controllers;
            class MemberController extends Controller {
                public function index() {
                    return route('member');
                }
            }

        添加路由:
        app/Http/routes.php
            Route::get('member/index', [
                'uses' => 'MemberController@index',
                'as'   => 'member'
            ]);

    例子(2)传递参数、验证参数
        namespace App\Http\Controllers;
        class MemberController extends Controller {
            public function index($id) {
                return $id;
            }
        }

        Route::get('member/{id}', [
            'uses' => 'MemberController@index',
            'as'   => 'member'
        ])->where('id', '[0-9]+');

2、分配数据
    return view('phpknowledge.index', [
        'all_knowledge' => $all_knowledge
    ]);

五、laravel视图

1、怎样输出视图
    namespace App\Http\Controllers;
    class MemberController extends Controller {
        public function index() {
            return view('member');
        }
    }

    Route::get('member/index', 'MemberController@index');

2、一个控制器对应一个view文件夹
    app/Http/Controllers/MemberController.php
        namespace App\Http\Controllers;
        class MemberController extends Controller {
            public function index() {
                return view('member/member');
            }
        }

    app/Http/routes.php
        Route::get('member/index', 'MemberController@index');

    resources/views/member/member.blade.php
        my name is member

3、将控制器的数据输出到视图文件上
    Route::get('member/index', 'MemberController@index');

    namespace App\Http\Controllers;
    class MemberController extends Controller {
        public function index() {
            return view('member/member', [
                'name' => 'gengen',
                'age'  => 18
            ]);
        }
    }

    my name is member
    {{$name}}
    {{$age}}

4、循环数据
    @foreach($all_knowledge as $key => $value)
        {{$value->title}}
    @endforeach

5、页面跳转
    return redirect('/uploadknowledge');

六、laravel模型

1、新建模型
    Route::get('member/index', 'MemberController@index');

    namespace App\Http\Controllers;
    use App\Member;
    class MemberController extends Controller {
        public function index() {
            return Member::getMember();
        }
    }

    新建一个模型文件app\Member.php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    class Member extends Model{
        public static function getMember(){
            return 'this is mebber model';
        }
    }

七、连接数据库、操作数据库的三种方式

laravel中提供DB facade(原始查找)、查询构造器、Eloquent ORM三种操作数据库方式

1、连接数据库
    .env    数据库配置
    DB_HOST=localhost          dbhost
    DB_DATABASE=laravel        dbname
    DB_USERNAME=root           username
    DB_PASSWORD=root           password

2、使用DB facade实现CURD
    (1) 新建路由
        Route::get('city', 'cityController@index');

    (2) 新建控制器,直接在控制器里面查询
        namespace App\Http\Controllers;
        use Illuminate\Support\Facades\DB;
        class CityController extends Controller {
            public function index() {
                $insert = DB::insert('insert into city set name="安徽",state="init"');
                增:返回bool

                $delete = DB::delete('delete from city where id > 5');
                删:返回删除的行数

                $update = DB::update('update city set name = "上海" where id = 8');
                改:返回更新的行数

                $city   = DB::select('select * from city');
                查:返回数组
            }
        }

3、使用查询构造器实现CURD
    (1)增:
            $insert_bool = DB::table('city')->insert(['name' => '湖南', 'state' => 'init']);
            插入一条数据返回bool值

            $insert_id = DB::table('city')->insertGetId(['name' => '湖北', 'state' => 'init']);
            插入一条数据返回插入的记录id

            $insert_bool = DB::table('city')->insert([['name' => '北京', 'state' => 'init'], ['name' => '上海', 'state' => 'init']]);
            插入多条数据返回bool值

    (2)删:
            $delete_row = DB::table('city')->where('id', 14)->delete();
            删除一条记录,返回受影响的行数,1行

            $delete_table = DB::table('city')->truncate();
            清空一张表,不返回任何标示

    (3)改:
            $update_row = DB::table('city')->where('id', 20)->update(['name' => '日本']);
            更新一条数据返回受影响的行数,1行

            $update_row = DB::table('carousel')->increment('order_number');
            让所有记录的order_number都自增1,返回受影响的行数,6行

            $update_row = DB::table('carousel')->decrement('order_number');
            让所有记录的order_number都自减1,返回受影响的行数,6行

            $update_row = DB::table('carousel')->increment('order_number', 100);
            让所有记录的order_number都自增100,返回受影响的行数,6行

            $update_row = DB::table('carousel')->decrement('order_number', 100);
            让所有记录的order_number都自减100,返回受影响的行数,6行

            $update_row = DB::table('carousel')->where('id', 1)->increment('order_number', 200);
            修改一条记录id为1的order_number字段自增200,返回受影响的行数,1行

            $update_row = DB::table('carousel')->where('id', 1)->increment('order_number', 200, ['name' => '自增同时修改字段']);
            修改一条记录id为1的order_number字段自增200,同时去修改其他字段,返回受影响的行数,1行

    (4)查:
            $select_rows = DB::table('city')->get();
            get方法查询所有记录

            $first_row = DB::table('carousel')->orderBy('id', 'asc')->first();
            first方法查询排序后的第一条

            $select_rows = DB::table('carousel')->where('id', '>=', 2)->get();
            where方法查询符合单个条件的所有记录

            $select_rows = DB::table('carousel')->whereRaw('id >= ? and order_number > ?', [1, 5])->get();
            whereRaw方法查询符合多个条件的所有记录

            $select_field = DB::table('carousel')->pluck('name');
            pluck方法查询符合条件的每条记录的name字段

            $select_field = DB::table('carousel')->lists('name');
            $select_field = DB::table('carousel')->lists('name', 'id_code');
            lists方法查询符合条件的每条记录的name字段(或者查询符合条件的每条记录的name字段以id_code为键名)

            $select_field = DB::table('carousel')->select('id','id_code','name')->get();
            select方法查询符合条件的每条记录的指定字段

            DB::table('user_log')->chunk(10, function($number){
                var_dump($number);
                if(???) return false;
            });
            chunk方法根据条件每次查询固定的记录,同时内部的回调函数可以控制流程,当满足某个条件的时候可以return false

            dd($select_field);

    (5)聚合函数:
            $count = DB::table('city')->count();
            统计总的记录数

            $max = DB::table('user_log')->max('id');
            求最大值

            $min = DB::table('user_log')->min('id');
            求最小值

            $avg = DB::table('user_log')->avg('id');
            求平均值

            $sum = DB::table('user_log')->sum('user_id');
            求和

            dd($sum);

4、使用Eloquent ORM实现CURD
    介绍:laravel所自带的Eloquent ORM是一个优美、简洁的ActiveRecord实现,用来实现数据库操作,每个数据表都有一个与之对应的模型model,用于和数据表交互

    1) 简介、模型的建立及查询数据:
        路由:
            Route::any('orm1', ['uses' => 'CityController@orm1']);

        控制器:
            namespace App\Http\Controllers;
            use App\City;
            class CityController extends Controller
            {
                public function orm1()
                {
                    (1)all方法查询所有的记录
                        $city = City::all();

                    (2)find方法根据主键id查询单条记录
                        $city = City::find(1);

                    (3)findOrFail方法根据主键id查询单条记录,如果查询失败则报异常
                        $city = City::findOrFail(1);

                    (4)get方法查询所有记录
                        $city = City::get();

                    (5)first方法查询第一条记录
                        $city = City::where('id', '>', 1)->orderBy('id', 'desc')->first();

                    (6)chunk方法每次查询固定条数记录出来
                        City::chunk(1, function ($number) {
                            var_dump($number);
                        });

                    (7)count()方法求记录总条数
                        $count = City::count();

                    (8)max()方法求最大值
                        $max = City::where('id', '>', 1)->max('parent_id');;
                }
            }

        模型:
            namespace App;
            use Illuminate\Database\Eloquent\Model;
            class City extends Model
            {
                protected $table = 'city';      //  指定表名 与 模型关联起来
                protected $primaryKey = 'id';   //  指定主键,默认是id可以不写
            }

    2) 新增数据,自定义时间戳和批量赋值的使用:
        路由:
            Route::any('orm1', ['uses' => 'CityController@orm1']);

        控制器:
            namespace App\Http\Controllers;
            use App\City;

            class CityController extends Controller
            {

                public function orm1()
                {
                    //  新增数据,保存数据
                    $city = new City();
                    $city->name = '123456';
                    $city->state = 'init';
                    $bool = $city->save();
                    dd($bool);

                    //  使用模型的create方法新增数据
                    $city = City::create(['name' => '南通', 'state' => 'init']);
                    dd($city);

                    //  以属性去查询数据,如果没有的话就去创建
                    $city = City::firstOrCreate(['name' => '南通']);

                    //  以属性去查询数据,如果没有的话就去创建,但是需要使用save保存下来
                    $city = City::firstOrNew(['name' => '南通ssss']);
                    $city->save();
                    dd($city);
                }
            }

        模型:
            namespace App;
            use Illuminate\Database\Eloquent\Model;

            class City extends Model
            {
                protected $table        = 'city';      //  指定表名 与 模型关联起来
                protected $primaryKey   = 'id';        //  指定主键,默认是id可以不写
                public    $timestamps   = false;       //  关闭自动维护时间戳(如果改成true,那么需要手动事先添加created_at、updated_at两个字段,此时的时间是datetime格式)

                protected function getDateFormat()     //  此方法可以将created_at、updated_at两个字段的datetime类型改成时间戳的格式
                {
                    return time();
                }

                protected function asDateTime($value)  //  取出来的时间不要格式化
                {
                    return $value;
                }
            }

    3) 使用Eloquent ORM修改数据:
        路由:
            Route::any('orm1', ['uses' => 'CityController@orm1']);

        控制器:
            namespace App\Http\Controllers;
            use App\City;

            class CityController extends Controller
            {
                public function orm1()
                {
                    //通过模型更新数据
                    $city = City::find(9);
                    $city->name = '苏州';
                    $bool = $city->save();
                    var_dump($bool);

                    //批量更新数据,返回更新后的条数
                    $update_rows = City::where('id', '>', 2)->update(['parent_id' => 10]);
                    var_dump($update_rows);
                }
            }

        模型:
            namespace App;
            use Illuminate\Database\Eloquent\Model;

            class City extends Model
            {
                protected $table        = 'city';      //  指定表名 与 模型关联起来
                protected $primaryKey   = 'id';        //  指定主键,默认是id可以不写
                public    $timestamps   = false;       //  关闭自动维护时间戳(如果改成true,那么需要手动事先添加created_at、updated_at两个字段,此时的时间是datetime格式)

                protected function getDateFormat()     //  此方法可以将created_at、updated_at两个字段的datetime类型改成时间戳的格式
                {
                    return time();
                }

                protected function asDateTime($value)  //  取出来的时间不要格式化
                {
                    return $value;
                }
            }

    4) 使用Eloquent ORM删除数据:
        路由:
            Route::any('orm1', ['uses' => 'CityController@orm1']);

        控制器:
            namespace App\Http\Controllers;
            use App\City;

            class CityController extends Controller
            {
                public function orm1()
                {
                    //通过模型删除
                    $city = City::find(9);
                    $bool = $city->delete();
                    var_dump($bool);

                    //通过主键删除,返回删除的条数
                    $delete_rows = City::destroy(8);
                    $delete_rows = City::destroy(6, 7);
                    $delete_rows = City::destroy([6, 7]);
                    var_dump($delete_rows);

                    //通过指定条件删除,返回删除的条数
                    $delete_rows = City::where('id', '>', 2)->delete();
                    var_dump($delete_rows);
                }
            }

        模型:
            namespace App;
            use Illuminate\Database\Eloquent\Model;

            class City extends Model
            {
                protected $table        = 'city';      //  指定表名 与 模型关联起来
                protected $primaryKey   = 'id';        //  指定主键,默认是id可以不写
                public    $timestamps   = false;       //  关闭自动维护时间戳(如果改成true,那么需要手动事先添加created_at、updated_at两个字段,此时的时间是datetime格式)

                protected function getDateFormat()     //  此方法可以将created_at、updated_at两个字段的datetime类型改成时间戳的格式
                {
                    return time();
                }

                protected function asDateTime($value)  //  取出来的时间不要格式化
                {
                    return $value;
                }
            }

    5) 多数据库连接:
        .env文件配置如下:
            DB_HOST=127.0.0.1
            DB_DATABASE=dearedu
            DB_USERNAME=root
            DB_PASSWORD=root

            DB_HOST_DEAREDU_MY=127.0.0.1
            DB_PORT_DEAREDU_MY=3306
            DB_DATABASE_DEAREDU_MY=dearedu_my
            DB_USERNAME_DEAREDU_MY=root
            DB_PASSWORD_DEAREDU_MY=root

        config\database.php文件配置如下:
            'mysql' => [
                'driver'    => 'mysql',
                'host'      => env('DB_HOST', 'forge'),
                'database'  => env('DB_DATABASE', 'forge'),
                'username'  => env('DB_USERNAME', 'forge'),
                'password'  => env('DB_PASSWORD', 'forge'),
                'charset'   => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix'    => '',
                'strict'    => false,
            ],

            'mysql_dearedu_my' => [
                'driver' => 'mysql',
                'host' => env('DB_HOST_DEAREDU_MY', 'forge'),
                'port' => env('DB_PORT_DEAREDU_MY', '3306'),
                'database' => env('DB_DATABASE_DEAREDU_MY', 'forge'),
                'username' => env('DB_USERNAME_DEAREDU_MY', 'forge'),
                'password' => env('DB_PASSWORD_DEAREDU_MY', 'forge'),
                'charset' => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix' => '',
                'strict' => false,
                'engine' => null,
            ],

        app\Http\Controllers\MemberController.php文件配置如下:
            namespace App\Http\Controllers;
            use App\Member;
            class MemberController extends Controller
            {
                public function index()
                {
                    $members = Member::getMember();
                }
            }

        app\Member.php文件配置如下:
            namespace App;
            use Illuminate\Database\Eloquent\Model;
            use Illuminate\Support\Facades\DB;
            class Member extends Model
            {
                public static function getMember()
                {
                    return DB::select("select mid from cms_member");
                }
            }

        app\Http\Controllers\IndexController.php文件配置如下:
            namespace App\Http\Controllers;
            use App\Unit;

            class IndexController extends Controller
            {
                public function index()
                {
                    $units = Unit::getUnit();
                }
            }

        app\Unit.php文件配置如下:
            namespace App;
            use Illuminate\Database\Eloquent\Model;
            use Illuminate\Support\Facades\DB;
            class Unit extends Model
            {
                public static function getUnit()
                {
                    return DB::connection('mysql_dearedu_my')->select("select id from my_config_unit limit 5");
                }
            }

八、Blade模板引擎

1、Blade模板引擎简介及模板继承的使用

    简介:
    1) Blade是laravel提供的一个既简单又强大的模板引擎
    2) 和其他流行的PHP模板引擎不一样,Blade并不限制你在视图中使用原生PHP代码
    3) 所有Blade视图页面都将被编译成原生PHP代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译

    模板继承:
    1) section
    2) yield
    3) extends
    4) parent

    为什么使用模板继承
    第一步:
        添加一个路由
            Route::any('about', ['uses' => 'AboutController@about']);

    第二步:
        添加一个控制器 AboutController.php
            namespace App\Http\Controllers;
            use App\City;

            class AboutController extends Controller {
                public function about() {
                    return view('about.about');
                }
            }

    第三步:
        添加一个视图文件 views/about/about.blade.php
            这个页面是关于我们

            @extends('layout')

            @section('header')
                @parent
                又添加了内容
            @stop

            @section('content')
                重写了中间部分
            @stop

            @section('footer')
                重写了下底部信息
            @stop

    第四步:
        添加一个全局共用模块 views/glob.blade.php
            
                
@section('header') 头部 @show
@yield('content', '主要区域')
@section('footer') 底部 @show

2、基础语法及include的使用

    @include('about.child', ['name' => '小明'])

    @include('common.header')       加载公用的静态模板,views -> common -> header.blade.php

3、流程控制

    1) if
    2) unless
    3) for
    4) foreach

4、模板中的URL

    1) url()
    2) action()
    3) route()

laravel之表单篇

一、Controller介绍

  1. Controller之Request

     laravel中的请求使用的是symfony/http-foundation组件
     请求里面存放了$_GET $_POST $_COOKIE $_FILES $_SERVER等数据
    
     eg1:
         use Illuminate\Http\Request;
         class ExampleController extends Controller {
             public function request1(Request $request) {
                 #1: 取值
                     echo $request->input('name');                                      //获取参数
                     echo $request->input('sex', '未获取到数据,这是默认值');            //如果没有这个参数,将采用默认值
                     echo $request->has('sex') ? $request->input('sex') : '无参数' ;    //判断是否存在这个参数,存在输出,否则默认值
                     $request->all();                                                   //获取所有的参数
    
                 #2: 判断请求类型
                     var_dump($request->method());                                     //请求类型
                     var_dump($request->isMethod('GET'));                              //是否是get请求
                     var_dump($request->ajax());                                       //是否是ajax请求
                     var_dump($request->is('student/*'));                              //判断访问路劲是否是这个
                     var_dump($request->url());                                        //获取当前的url
             }
         }
    
     eg2:
         namespace App\Http\Controllers;
         use Illuminate\Http\Request;
         class UploadController extends Controller {
             public function save(Request $request) {
                 echo $request->input('file');
             }
         }
    
         Route::any('upload/save', 'UploadController@save');
    
         
    {{ csrf_field() }}
    eg3: namespace App\Http\Controllers; use Illuminate\Http\Request; class RbacController extends BaseController { public function roleset(Request $request) { echo json_encode($request->input('rolename')); } } $.ajax({ type: 'POST', url: '/roleset', data: { rolename : $('#rolename').val()}, dataType: 'json', headers: { 'X-CSRF-TOKEN': "{{ csrf_token() }}" }, success: function(data){ } }); Route::any('/roleset', 'RbacController@roleset');
  2. Controller之Session

     laravel中session三种使用方式:
     a: HTTP request类的session()方法
     b: session()辅助函数
     c: Session facade
    

Controller之Response

Controller之Middleware

零碎

lumen框架的时区问题:https://www.widlabs.com/article/lumen-set-timezone

laravel框架的时区问题:config/app.php 找到参数'timezone'='UTC',设置'timezone'='Asia/Shanghai'

多个试图共享一个BaseController的资源:view()->share('uname', $memberInfo['data'][0]->xueke);

加载第三方类库

    1. 比如我要加载alipay
    2. 在app目录下新建libs目录存放第三方的类库
    3. 新建aplipay目录,里面有如下我修整的目录:
            /alipay_submit.class.php
            /alipay_notify.class.php
            /...
    4. 找到根目录下的composer.json文件
            "autoload": {
                "classmap": [
                    "database",
                    "app/libs/alipay" //加我**************
                ],
            },
    5. 运行终端,cd到项目路径,执行   composer dumpautoload
    6. 然后就能在项目中愉快的使用
            use AlipaySubmit;
            use AlipayNotify;

解析业务层输出来的html标签

    {!! $data['knowledges'] !!}

Laravel框架开发调试工具Laravel Debugbar使用

    引入package包:                                  composer require barryvdh/laravel-debugbar
    在config/app.php的providers中添加一行注册:       Barryvdh\Debugbar\ServiceProvider::class,

laravel5.1使用redis

.env
    REDIS_HOST=127.0.0.1
    REDIS_PASSWORD=123456
    REDIS_PORT=6378

config/database.php
    redis -> host
          -> password
          -> port

控制器中需要指定:
    use Illuminate\Support\Facades\Redis;

    Redis::set('key', 1212);

laravel5.1使用页面返回

    @if(session('errors'))
        
{{ session('errors') }}
@endif return back()->with('errors', '请勾选需要购买的课程');

安装验证码
http://laravelacademy.org/post/3910.html

试图页面中显示验证码
src="/checkCode" onclick="this.src='/checkCode/'+new Date().getTime()"

控制器中加上方法,让图片上的src可以访问到
public function checkCode()
{
        return captcha();
}

页面提交去验证
$rules = ['captcha' => 'required|captcha'];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) result(400, '验证码错误');

你可能感兴趣的:(laravel 5.1框架的日常使用笔记)