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



  • 相关阅读:
    mysql/oracle 小技巧自动插入当前时间
    Java StringUtil 用法示例
    timestamp与String的相互转换
    gzip/gunzip用法
    maven常用指令
    微基站、宏基站区别
    CRAN方案
    让gvim中支持utf8编辑
    java正则表达式的几个小例子
    Sql Server数据库汉字按字母、笔划、拼音首字母、排序
  • 原文地址:https://www.cnblogs.com/xionghao/p/6858351.html
Copyright © 2011-2022 走看看