zoukankan      html  css  js  c++  java
  • laravel框架学习笔记

    一、laravel的安装

      1、composer

        作用:主要管理php中的依赖关系(类似于yum源)

        可以安装的软件:

              curl       //主要用到微信开发中

              upload    //文本操作

              excel    //表格

              mail     //邮件

              log      //日志

              laravel    //框架

        安装:

            下载地址:https://getcomposer.org/

            没有php解释器,无法运行php命令

                yum install php-cli

            执行下载命令

            解压后为composer.phar,

            到该目录下运行命令将composer.phar重命名到/usr/local/bin/下

              mv composer.phar /usr/local/bin/ composer并检查是否重命名成功

            切换到composer的中国镜像:

              composer config -g repo.packagist composer https://packagist.phpcomposer.com

    2、安装laravel

      1、进入项目目录

        cd /usr/local/apache2.4/htdocs/

        composer create-project --prefer-dist laravel/laravel blog

        或者安装自己想要的版本

        composer create-project --prefer-dist laravel/laravel blog 5.4.*

       2、配置Apache:

        进入到laracel根目录

        cd blog/

        chmod 777 -R storage/

        打开浏览器输入地址:localhost/blog/public/  显示Larave欢迎洁面,安装成功!!

    二、laravel配置文件

        1、环境配置(.env文件)

            APP_KEY:环境变量解析(网站的密匙,保证网站的安全)

                生成密匙:php artisan key:generate

            APP_DEBUG:开发模式(默认为ture,上线需设置为false)

            获取配置信息:env('')方法,设置环境配置中未设置的变量env('','')

        2、系统配置(config目录下)

            读取配置:config('文件名.配置名'),如:config('app.timezone')

            修改配置(临时性的,不修改配置文件):config(['文件名.配置名'=>'值']);如:config(['app.timezone'=>'UTC']);

    三、php artisan(php的工具匠):在项目根目录下才能执行

        本生就是一些php文件,可以在命令行模式下执行这些文件,可以完成创建控制器、创建中间件、生成密匙等。

        1、php artisan down:网站下线(页面为views/503.blade.php)

        2、php artisan up:网站上线

        3、php artisan route:list:查看路由列表

        4、php artisan make:controller 控制器名:新建控制器

    四、路由

        1、路由类型

          Route::get($rul,$callback);

          Route::post($rul,$callback);

          Route::put($rul,$callback);

          Route::patch($rul,$callback);

          Route::delete($rul,$callback);

          Route::options($rul,$callback);

        2、get();

            Route::get('login','LoginController@index');

        3、post();

            Route::post('check','LoginController@check');

            受CSRF保护(保护网站不受跨站请求伪造(CSRF)攻击。保护表单安全。)

            需在表单内添加{{csrf_field()}}

        4、put();

            路由中书写:

                 Route::put('putWeb','LoginController@putweb');  //请求

                 Route::put('put','LoginController@put');    //处理

            控制器书写:

                 public function putWeb(){

                    return view('putweb');

                  }    //请求

                 public function put(Request $request){

                    dd($request->input());

                  }    //处理

        5、路由的三种常见形式:

            HTTP请求路由:

                Route::get('url信息','处理的逻辑地址或功能代码');

                Route::put('url信息','处理的逻辑地址或功能代码');

                Route::post('url信息','处理的逻辑地址或功能代码');

                Route::delete('url信息','处理的逻辑地址或功能代码');

            Resource路由:url和控制器中的7个标准RESTful动作相绑定

                Route::resource('url相关信息','控制器名称');

            控制器路由:url和控制器中的所有动作(只需要按照指定的规范来编写动作即可)

                Route::controller('url相关信息','控制器名称');

        6、路由的处理:

            (1)把路由的处理交给控制器中的某个动作处理

                Route::get('/','IndexController@index')

            (2)直接处理路由(使用闭包函数形式处理)

                Route::get('/',function(){

                    });

            (3)路由参数:

                Route::get('view/{id}',function($id){

                    });    //参数必传

                Route::get('view/{id?}',function($id=1){

                    });    //可选参数

        7、控制器和路由

            (1)为控制器绑定路由时,可以直接使用HTTP请求形式的路由

              需要每一个URL绑定到控制器中的某一个动作上

                Route::get('/','IndexController@index');

            (2)RESTful形式的资源控制器路由(只支持7种路由)

                Route::resource('url相关信息','控制器名称');

            (3)隐式控制器路由

                Route::controller('url相关信息','控制器名称');

                访问index,方法名应为getIndex

                访问getViewMsg方法,地址为msg/view-msg

        8、路由组(以后台管理模块为例)

            Route::group(['namespace'=>'Admin','prefix'=>'admin','middleware'=>'adminLogin'],function(){

              Route::get('/','IndexController@index');//后台首页

              Route::resource('user','UserController');//后台用户管理模块

              Route::resource('goods','GoodsController');//后台商品管理模块

            });

            (注:namespace为命名空间,prefix为路由前缀,middleware为中间件)

        9、中间件

            简介:中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制。例如,Laravel 内置了一个中间件来验证用户是否经过认证(如登录),如果用户没有经过认证,中间件会将用户重定向到登录页面,而如果用户已经经过认证,中间件就会允许请求继续往前进入下一步操作。

               当然,除了认证之外,中间件还可以被用来处理很多其它任务。比如:CORS 中间件可以用于为离开站点的响应添加合适的头(跨域);日志中间件可以记录所有进入站点的请求,从而方便我们构建系统日志系统。

               Laravel 框架自带了一些中间件,包括认证、CSRF 保护中间件等等。所有的中间件都位于 app/Http/Middleware 目录下。

            创建中间件:php artisan make:middleware CheckToken

                  在app/Http/MiddLeware目录下新建一个中间件类CheckToken

            注册中间件:中间件分三类,分别是全局中间件、中间件组和指定路由中间件;

                  a、全局中间件:在app/Http/Kernel.php的数组属性$middleware中添加即可。

                  b、分配中间件到指定路由:首先在app/Http/Kernel.php中添加自己的中间件key,定义后可以使用middleware方法将其分配到路由:

                    Route::get('/',function(){

                      //

                    })->middleware('key');或路由组参数方式。

                  c、中间件组:通过使用HTTP Kernel提供的$middlewareGroups属性实现。

                    Route::get('/', function () {   

                       //

                    })->middleware('web');

                      Route::group(['middleware' => ['web']], function () {

                        //
                      });
                      默认情况下, RouteServiceProvider 自动将中间件组 web 应用到 routes/web.php 文件,将中间件组 api 应用到 routes/api.php
                  d、中间件参数:中间件可以接收额外的参数。例如:中间件文件中
                        
    public function handle($request, Closure $next, $role)
                        {
                          if (! $request->user()->hasRole($role)) {
                            // Redirect...
                          }
    
                            return $next($request);
                        }
                        路由中书写:
                        中间件参数可以在定义路由时通过 : 分隔中间件名和参数名来指定,多个中间件参数可以通过逗号分隔
                        
    Route::put('post/{id}', function ($id) {
                          //
                        })->middleware('role:editor');
                  e、终端中间件:终端中间件,可以理解为一个善后的后台处理中间件。有时候中间件可能需要在 HTTP 响应发送到浏览器之后做一些工作,比如,Laravel 内置的 session 中间件会在响应发送到浏览器之后将 Session 数据写到存储器中,为了实现这个功能,需要定义一个终止中间件并添加 terminate 方法到这个中间件:
                        <?php
    
                        namespace IlluminateSessionMiddleware;
    
                        use Closure;
    
                        class StartSession
                        {
                            public function handle($request, Closure $next)
                            {
                                return $next($request);
                            }
    
                            public function terminate($request, $response)
                            {
                                // 存储session数据...
                            }
                        }
    

                      terminate 方法将会接收请求和响应作为参数。定义了一个终端中间件之后,还需要将其加入到 app/Http/Kernel.php 文件的全局中间件列表中。

                      当调用中间件上的 terminate 方法时,Laravel 将会从服务容器中取出一个该中间件的新实例,如果你想要在调用 handle 和 terminate 方法时使用同一个中间件实例,则需要使用容器提供的 singleton 方法以单例的方式将该中间件注册到容器中。关于服务容器我们就会在后面讲到,暂时不深入展开了。

        10、请求:

            (1)获取地址:
                $request->fullUrl();//输出当前url地址
                $request->path();//获取URL路由
                $request->url();//获取URL地址初参数
                $request->is('request');//判断路由是否为request,返回true或falst
          
      (2)获取请求类型:
                $request->method();//返回请求类型
                $request->isMethod('请求类型');//判断请求是否为特定请求
        11、闪存:闪存数据即 Flash Data,它的有效期是到下一个请求为止,主要用在短生命周期的变量传递
            (1)控制器方法中写入缓存:
                $request->flash();//全部写入闪存
                $request->flashOnly();//把谁写入到闪存
                $request->flaushExcept();//除了谁写入闪存
                或者在返回错误提示的时候存入缓存;
                return back()->with('errors','用户名长度有误')->withInput();//全部存入闪存
            (2)页面input中添加value="{{old('input的name')}}"
            详细:http://www.imooc.com/article/17873?block_id=tuijian_wz

         12、文件上传:
            (1)获取上传文件信息:
                $img=$request->file('input的name');或者
                $img=$request->input的name
            (2)判断文件是否上传
                $request->hasFile('input的name');
            (3)把文件移动到指定目录
                $ext=$request->file('img')->getClientOriginalExtension();//获取后缀名
                $newFile=time().rand().".".$ext//新文件名
                $request->file('img')->move('目的地址',$newFile);//移动到指定目录
            (4)
            (5)
        13、cookie
            查看:$requset->cookie();//查看所有的cookie
                或者Cookie::get();
            设置:Cookie::queue('key','value',生存时间);
                或者
                  $cookie=cookie('key','value',生存时间);
                  response('重定向')->cookie($cookie);
            (注:laravel框架把所有的cookie进行加密,所以$_COOKIE['name'] != $request->cookie())
        14、响应:所有的路由及控制器必须返回某个类型的响应,并发送回用户的浏览器,如果响应数组的话,直接转换成json。
            (1)响应字符串
            (2)响应数组:转换成json
            (3)响应页面:return view('页面')->with(‘传递值’);
            (4)文件下载:
                   return response()->download('文件所在路径');
                   会报错,没有扩展
                   xampp:在/opt/lampp/etc/php.ini,找到php_fileinfo.dll并开启
                   重启apache
            (5)文件查看:return response()->file('文件所在路径');

    五、数据库迁移(migrate)

        1、数据库迁移简介

            (1)migrate简介:

                方便团队开发,一次更改,团队成员都会影响到

                直接使用php代码,而不是使用sql语句来操作数据库

            (2)配置数据库账号信息:.env配置文件

            (3)数据库迁移命令:php astisan migrate

                命令行工具:sublime插件,terminal

            (4)删除自带的用户认证模块:php astisan fresh 

        2、创建数据表

            (1)创建数据库文件

                文件所在目录:databases/migrations/数据库迁移文件

                文件名:年_月_日_时分秒_create_tableName_table.php

                创建命令:php artisan make:migration create_name_table

            (2)

                在up方法中(新增数据表):

                  Schema::create('数据库名',function(Blueprint $table){

                    $table->字段类型('字段名字');

                    如:$table->increments('id');

                  }) 

                  执行数据库迁移命令:php artisan migrate

        3、数据库填充

            (1)创建模型类

                a、一个数据库模型类对应一个数据表

                b、目录:app/目录下直接创建

                    文件名:表名.php(首字母大写)

                c、模型类结构:类名  extends Model

            (2)数据填充

                a、数据填充文件

                    位置:databases/seeds/

                    文件名:表名TableSeeder.php

                    数据填充文件基本结构:类名 extends Seeder

                    填充文件方法:

                        public function run(){

                            DB::table('表名')->delete();//清空原始数据

                            表名::create([

                              '字段名'=>'值'

                            ]);

                        }

                b、执行数据填充命令

                    在databases/seeds/DatabaseSeeder.php文件中调用数据填充命令

                        在run方法中:$this->call('数据库填充文件类名');

                    php artisan db:seed

                    可能会痴线一些问题,会提示一些类不能用

                         a、引入类的完全命名空间

                         b、可以使用composer命令:composer dump-autoload

      六、数据库操作

        1、连接数据库(.env文件):

              DB_CONNECTION=mysql

              DB_HOST=127.0.0.1

              DB_PORT=3306

              DB_DATABASE=homestead

              DB_USERNAME=homestead

              DB_PASSWORD=secret

        2、执行原声的sql语句

             查询:DB::select('select * from tableName');  // 为使用根命名空间

             删除:DB::delete('delete from tableName where id=XX');

             新增:DB::insert('insert into tableName value()');

             修改:DB::update('update tableName set 字段="值"');

             执行一段命令:DB::statement('create database databaseName');

        3、事物机制:(判断执行的sql语句知否执行成功。)

             开启事物:DB::beginTransaction();

             事物回滚:DB::rollback();

             食物提交:DB::commit();

        4、连贯操作;

             查询:

                DB::table('tableName')->get();//查询所有数据

                DB::table('tableName')->find();//查询一条数据

                DB::table('tableName')->where(''id,'=',3)->first();//查询一条数据

             where():

                基本的>、<、=、<>条件,当为=时可省略

                可作区间条件:DB::table('tableName')->where([[''id,'>=',2],['id','<=',5]])->get();

                like匹配:DB::table('tableName')->where([[''name,'like','%2%'],[''id,'<=',5]])->get();//and形式

                    DB::table()->where()->orwhere()->get();//or形式

                wherebetween&&whereNotBetween:

                    DB::table('tableName')->whereBetween('id',[10,15])->get();

                    DB::table()->whereNotBetween()->get()

                whereIn&&whereNotIn:

                    DB::table()->whereIn('id',[1,2,4,6,7])->get();

                    DB::table()->whereNotIn()->get();

                whereNull&&whereNotNull:

                    DB::table()->whereNull('字段')->get()

                    DB::table()->whereNotNull('字段')->get();

            value():

                DB::table('tableName')->where('id',2)->value('name');//只取出这个字段的值

            pluck():

                DB::table()->pluck();//取出一列数据

            聚合:

                DB::table()->count();//总数

                DB::table()->max('字段');//最大值

                DB::table()->min('字段');//最小值

                DB::table()->avg('字段');//平均值

                DB::table()->sum('字段');//求和

            使用mysql原生函数:

                例如:得到查询字段的总数

                DB::table('tableName')->select(DB::raw('count(*)' tot))->get();

      七、blade模版引擎

            引用简书文章http://www.jianshu.com/p/7d65f9eb94be

  • 相关阅读:
    ajax 上传文件
    在linux服务器centos上使用svn同步代码到项目中
    css3 选择器 权重问题 (第二部分)
    css3 选择器 权重问题 (第一部分)
    css3 文本模型
    (java)剑指offer题三
    (java)剑指0ffer题二
    (java)剑指offer题一
    java程序入口main()方法浅析
    jar命令浅析
  • 原文地址:https://www.cnblogs.com/yuyangphpweibo/p/7866388.html
Copyright © 2011-2022 走看看