zoukankan      html  css  js  c++  java
  • Laravel基本使用

    laravel
    一.简介
    二.运行环境要求
    1.php 版本>=5.5.9
    2.Mcrypt PHP扩展 php的加密扩展,提供多种加密算法
    3.openssl扩展 对传输的数据进行加密
    4.mbstring扩展 提供了针对多字节字符串的函数,能够帮助处理php多字节编码
    5.Tokenizer PHP扩展 php代码片段解析
    三.安装
    1.composer安装
    composer create-project laravel/laravel your-project-name --prefer-dist "5.1.*"
    2.直接复制一份安装好的即可

    四.本地域名解析与apapche虚拟主机配置(window下)
    1.打开:C:WindowsSystem32driversetc目录中的hosts文件:
    配置信息:127.0.0.1 自定义主机名

    2.在apache的confextra的httpd-vhosts.conf配置文件中配置
    <VirtualHost *:80>
    ServerAdmin chenxiaoyu@lampbrother.net
    DocumentRoot "虚拟主机目录位置"
    ServerName 虚拟主机名
    ErrorLog "logs/虚拟主机名-error.log"
    CustomLog "logs/虚拟主机名-access.log" common
    </VirtualHost>

    注:配置虚拟主机出现的问题
    ①.配置好之后 localhost不能访问
    ②.配置完成只能访问根目录
    ③.hosts文件打不开
    五.配置
    1.开发前必须要做的
    ①.配置虚拟主机
    ②.storage 和 vendor 目录要让服务器有写入权限 linux
    ③.程序密钥
    (a).这里是默认生成的,如果没有的话可以使用命令
    php artisan key:generate
    (b).如果没有key会报错
    No supported encrypter found. The cipher and / or key length are invalid.
    ④.修改时区
    config/app.php 'timezone'=>'PRC'
    优先建立出来 404 页面
    404.blade.php

    SEO 搜索引擎优化

    2.开发过程中要用到的
    ①.读取和设置配置
    (a).Config::get('app.timezone');
    (b).Config::set('app.timezone','PRC');
    ②.获取环境变量
    (a).env('DB_HOST','');
    ③.关闭和启动应用
    (a).关闭 php artisan down 模版配置 resources/views/errors/503.blade.php
    (b).开启 php artisan up
    ④.URL重写
    public/.htaccess
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    六.路由:将信息从源地址传递到目的地的角色 abort
    1.文件位置:app/Http/routes.php
    2.基本路由
    ①.Route::get('/admin', function () {
    return view('useradd');
    });
    // controller@方法
    ②.Route::post('/admin', function () {
    return view('useradd');
    });
    使用post方式请求服务器的时候,可以先将http/kernel.php 中的第20行屏蔽
    ③.Route::put(); //修改
    ④.Route::delete(); //删除
    3.带参数的路由
    ①.普通使用
    Route::get('/goodsinfo/{id}', function ($id) {
    echo "商品的id是".$id;
    });
    ?a=123&b=456

    ②.限制参数类型
    Route::get('/user/{id}',function($id){
    echo $id;
    })->where('id','d+');
    4.传递多个参数
    ①.Route::get('/user/{name}/{id}',function($name,$id){
    echo $name;
    echo "<br>";
    echo $id;
    })->where('id','d+')->where('name','d+');
    5.路由别名 少
    ①.Route::get('/admin/user/delete',[
    'as'=>'udelete',
    'uses'=>function(){
    //快速获得改地址
    $url=route('udelete');
    echo 'ok';
    }
    ]);
    6.路由组设置 middleware
    ①.Route::group([],function(){

    });
    7.404页面设置
    resources/views/errors/404.blade.php
    8.CSRF保护
    POST 提交 自动执行 csrf

    TokenMismatchException in VerifyCsrfToken.php line 53:
    开启了csrf的保护
    csrf

    七.中间件
    1.创建(默认不直接生效)
    php artisan make:middleware LoginMiddleware
    2.事例代码
    $ip=$request->ip();
    $path=$request->path();
    file_put_contents('./ips.txt',$ip.'------'.$path." ",FILE_APPEND);

    路径的问题
    相对路径 ../ ./ 绝对路径 /

    php语言 绝对路径 / 代表 盘符根目录
    ./ ../ 相对路径 入口文件 所在的目录 public
    html的绝对路径 / 当前的域名 所指定的目录 public

    在laravel中 php端一律使用相对路径 html端 一律使用绝对路径
    echo "<img src='/1.jpg'>";
    include ""; 相对路径


    3.注册app/Http/Kernel.php
    ①.全局注册:$middleware 命名空间类名::class
    AppHttpMiddlewareLoginMiddleware::class
    ①.局部注册:$routeMiddleware 别名=>命名空间类名::class
    'login'=> AppHttpMiddlewareLoginMiddleware::class
    4.使用

    Route::get('/admin', [
    'middleware'=>'admin',
    'uses'=>function(){
    echo '后台';
    },
    ]);


    八.控制器
    1.创建控制器
    php artisan make:controller UserController --plain
    2.路由以及访问
    ①.普通用法
    Route::get('/stu/add','StuController@add');
    ②.带参数访问
    (a).路由带参数
    Route::get('/stu/del/{id}',[
    'uses'=>'StuController@del',
    ]);
    控制器函数 需要截取形参$id
    public function del($id){}

    (b).原生参数 ?id=123
    public function add(request $request){
    $id=$request->input('id');
    echo $id;
    }

    ③.别名
    Route::get('/stu/del/{id}',[
    'as'=>'udel',
    'uses'=>'StuController@del',
    ]);
    ④.中间件控制
    (a).第一种方法
    Route::get('/admin', [
    'middleware'=>'login',
    'uses'=>'StuController@update'
    ]);
    (b).第二种方法
    Route::get('/stu/update','StuController@update')->Middleware('login');

    ⑤.隐式控制器
    (a).路由
    Route::controller('users','UserController');
    //所有请求为users的 都由UserController来完成
    注:运行artisan命令的时候 要保证当前脚本不能有报错

    post/getStu

    (b).使用
    控制器中方法起名规则
    public function 请求方式+路径(){}
    例如:
    所访问的路径是 users/add
    public function getAdd(){}
    ⑥.restful 资源控制器
    Route::resource('type','TypeController');
    九.请求
    1.基本信息获取 了解
    ①.请求方法 $request->method();
    ②.检测方法 $request->isMethod('post');
    ③.请求路径 $request->path();
    ④.请求完整url $request->url();
    ⑤.获取ip $request->ip();
    ⑥.获取端口 $request->getPort();


    ⑦.获取头信息 $arr=$request->header('Connection');

    ******************************
    2.提取请求参数 POST GET
    ①.提取参数 $request->input('name');
    ②.设置默认值 $request->input('name','xy');
    ③.检测是否存在 $request->has('name');
    ④.提取所有参数 $arr=$request->all();
    ⑤.提取部分 $arr=$request->only(['username','password']);
    ⑥.提取部分 $arr=$request->except(['username','password']);

    3.文件操作
    ①.检测是否有文件上传 $request->hasFile('表单name值');
    ②.将文件移动到指定位置 $request->file('表单name值')->move('路径','新名字');

    路径的问题
    前台 html代码
    绝对路径 / 域名 直接 绑定的 那个文件夹 public里面的东西
    不能写相对路径
    php
    绝对路径 / 当前项目所在的盘符的根目录
    相对路径 ./ 当前入口文件所在的路径

    总结 laravel里面 html代码 绝对路径 php代码 相对路径
    echo "<img src='1.jpg'>"; html 绝对路径
    include file_get_content fopen ....... php 函数

    4.cookie操作
    ①.设置 Cookie::queue('cookie名','cookie值',过期时间);


    return response('')->withCookie('cookie名','cookie值',过期时间);

    ②.读取 Cookie::get('name');


    $request->cookie('name');

    //路由的路径的名字 和 public里面的文件夹的名字千万不要同名 同名 默认走的public里面的文件夹 *****************


    5.闪存信息:基于SESSION 用来存储请求参数的 session 关闭浏览器 flash 只要刷新一下页面 就失效 主要用来做注册
    ①.将所有的请求参数写入闪存中 $request->flash();
    ②.将部分参数写入闪存中 $request->flashOnly('参数1','参数2'..);
    ③.除去某些参数之外的参数 $request->flashExcept('参数1');
    ④.简便使用 return back()->withInput();

    获取闪存的参数 old('参数')


    十.响应
    1.返回字符串 return "string"; 相当于 echo
    2.设置cookie return response('')->withCookie('名','值',时间);

    3.返回json return response()->json(["a"=>100,"b"=>2000]);

    4.下载文件 return response()->download('web.config');
    5.页面跳转 return redirect('/goods/add'); return back(); //返回上一页
    6.显示模版 return response()->view('user'); return view('');

    十一.视图
    1.解析模版 view('user.add'); // / 都可以
    2.分配数据到模版
    view('user.add',[]);
    3.模版引擎blade
    ①.模版的默认存放位置 resource/views
    ②.使用变量 {{$username}}
    ③.设置函数 {{time()}}
    ④.设置默认值 {{$user or 'guest'}}
    ⑤.显示html代码 {!! $name !!}
    ⑥.引入子视图 @include('header')
    ⑦.模版继承 @extends('index')


    (a).占位符 @yield('title')

    @section('content')
    @show

    (b).新模板内容
    @section('title','new Title')

    @section('content')
    [ @parent ]
    新内容
    @endsection
    4.流程控制
    ① 判断
    @if($t==1)
    处理
    @elseif(count($records)>1)
    处理
    @else
    处理
    @endif
    ②.循环控制
    @for($i=0; $i<10; $i++)
    处理
    @endfor
    @foreach($users as $k=>$v)
    处理
    @endforeach

    十二.数据库操作

    1.支持的数据库类型
    mysql Postgres SQLite SQLServer
    2.数据库连接配置
    ①.文件位置 config/database.php
    ②..env环境快速配置
    3.数据库基本操作
    ***********************************************
    使用数据库的类的时候 一定要在上面现引入命名空间
    use DB;
    否则
    Class 'AppHttpControllersDB' not found
    ***********************************************

    ①.查询 DB::select()
    ②.插入 DB::insert
    ③.更新 DB::update
    ④.删除 DB::delete

    //上面的都不要记住

    ⑤.一般语句 DB::statement('drop table users');
    * ⑥.事务操作 DB::beginTransaction()
    DB::rollBack()
    DB::commit()

    * ⑦.操作多个数据库 DB::connection('数据库别名')->select();

    4.构造器
    ①.增删改查
    (a).插入
    单条: DB::table('stu')->insert(['name'=>'xy','age'=>46]);
    多条: DB::table('stu')->insert([['name'=>'xy','age'=>46],['name'=>'xy','age'=>46]]);
    获取id插入: $id=DB::table('stu')->insertGetId(['name'=>'xy','age'=>46]);
    (b).更新
    DB::table('stu')->where('id',1)->update(['name'=>'xy'])
    (c).删除
    DB::table('stu')->where('id','<','100')->delete();
    (d).查询
    查询所有: DB::table('stu')->get()
    查询单条: DB::table('stu')->first();
    查询单条结果中的某个字段 DB::table('stu')->value('name')
    获取一列数据 DB::table('stu')->lists('name')
    ②.连贯操作
    (a).设置字段名 DB::table('stu')->select('name','email as user_email')->get();
    (b).条件
    DB::table('stu')->where('name','like','%a%');->get();
    DB::table('stu')->where('name','>','100')->orwhere('name','xy')->get()
    DB::table('stu')->whereBetween('id',[1,5])->get()
    DB::table('stu')->whereIn('id',[1,2,3])->get()
    (b)排序 orderBy('name','desc');
    (c)分页 DB::table('stu')->skip(10)->take(5)->get();
    (d)分组 DB::table('stu')->groupBy('name')->having()->get();
    (e)连接表 DB::table('stu')->join('class','stu.cid','=','class.id')->select('stu.name','class.cname')->get();
    (f)计算
    总数 DB::table('stu')->count();
    最大值 DB::table('stu')->max('price') // min
    平均值 DB::table('stu')->avg('price')

    5.sql语句记录
    ①. app/Providers/AppServiceProvider.php
    boot方法中添加
    DB::listen(function($sql,$bindings,$time){
    //写入sql
    file_put_contents('.sqls',"[".date("Y-m-d H:i:s")."]".$sql." ",FILE_APPEND);
    });
    ②.
    routes.php
    Event::listen('illuminate.query',function($query){
    var_dump($query);
    });

    十三.设置自定义函数和自定义类文件
    1.建立出自定义文件 例如:app/common/function.php
    2.在项目下的composer.json中添加信息
    "autoload":{
    "classmap":[
    "database"
    ],
    "psr-4":{
    "App\":"app"
    },
    "files":[
    "app/common/function.php"
    ]
    }
    3.dos界面当中composer dump-auto

    十四.调试工具
    1.debugbar安装
    composer require barryvdh/laravel-debugbar

    在config/app.php里面的providers添加
    BarryvdhDebugbarServiceProvider::class,

    2.chrome 插件 postman 翻墙 安装

    防止csrf攻击
    打开 app/kernel.php 第20行

    {{csrf_field()}} 生成了一个hidden 表单提交

    {{csrf_token()}} 生成了一个 token字符串 ajax



  • 相关阅读:
    HDU 5583 Kingdom of Black and White 水题
    HDU 5578 Friendship of Frog 水题
    Codeforces Round #190 (Div. 2) E. Ciel the Commander 点分治
    hdu 5594 ZYB's Prime 最大流
    hdu 5593 ZYB's Tree 树形dp
    hdu 5592 ZYB's Game 树状数组
    hdu 5591 ZYB's Game 博弈论
    HDU 5590 ZYB's Biology 水题
    cdoj 1256 昊昊爱运动 预处理/前缀和
    cdoj 1255 斓少摘苹果 贪心
  • 原文地址:https://www.cnblogs.com/xionghao/p/6858351.html
Copyright © 2011-2022 走看看