laravel5.2—表单,验证码,图片上传,缓存

一 表单

1 传统表单提交

<form method="post" action="add">
 
    <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
         
    <input type="title" name="title" placeholder="请输入文章标题" autocomplete="off">
           
    <input type="submit" class="layui-btn" value="发布">
        
</form>

控制器验证

public function add(Request $request){       
     if($request->isMethod()=='post'){
         $this->validate($request, [
                'title' => 'required|max:50',
         ]);
     }
}

前端显示错误

@if (count($errors) > 0)
 
    <div class="alert alert-danger">
     
        <ul>
         
            @foreach ($errors->all() as $error)
             
                <li>{{ $error }}</li>
                 
            @endforeach
             
        </ul>
         
    </div>
     
@endif

2 ajax

<meta name="csrf-token" content="{{ csrf_token() }}">
<script type="text/javascript">
$.ajax({
        headers: {  
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')          
        },  
        type: 'POST', 
        url: '{{url("article/comment")}}', 
        data: {
          'title':$('#article input[name="title"]').val(),  
        }, 
        dataType: 'json', 
        async : 'false',    
        success: function(res){},
    });   
// 或者$.post
$.post('{{url("article/comment")}}',{'_token':'{{csrf_token()}}','title':$('#article input[name="title"]').val()},function(data)  

//第二个参数要传token的值 再传参数要用逗号隔开

</script>

控制器验证

public function add(Request $request){ 
        if($request->ajax()){         
            // 验证数据 自定义自定义验证
            $title = $request->input('title');          
            if(mb_strlen($title)>50){
                return response()->json(array('code'=>-1,'msg'=>'标题不得大于50位'));
            }             
            if(empty($title)){
                return response()->json(array('code'=>-1,'msg'=>'请填写标题'));
            }                       
            // 实现逻辑             
            $id = Db::table('article')->insert(['title'=>$title,'content'=>$content,'date'=>$date,'uid'=>$uid]);
             
            // 渲染返回             
            if($id){
                return response()->json(array('code'=>1,'msg'=>'发表成功'));
            }else{
                return response()->json(array('code'=>-1,'msg'=>'发表失败'));
            }                 
        }
    }

PS:如果js文件分离了出去,url如何填写
可以先在模板文件的javascript部分定义一个数组,存储地址

<script type="text/javascript">
var laravel = {
  'reg':'{{url("account/reg")}}',  
  'login':'{{url("account/login")}}',   
  'logout':'{{url("account/logout")}}',  
  'search':'{{url("search")}}',   
}
</script>

再使用数组填写地址

function logout(){
  $.ajax({ 
        headers: {    
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')       
        },
        type: 'POST',         
        url: laravel['logout'],
        data: {},         
        dataType: 'json',         
        async : 'false',    //同步        
        success: function(res){         
          if(res.code==-1){           
            layer.alert(res.msg,{icon:2});             
          }else if(res.code==1){       
        // 成功     
          }           
        }, 
    });     
}

二 验证码 ( laravel 5.2 验证码)

1 找到项目中的composer.json,在里面加上下面一句

"require": {  
 
      ...  
       
    "gregwar/captcha": "1.*"  
     
},

2 cmd 进入项目根目录 输入以下命令(前提是装了 composer)

composer update -vvv   // 后面的-vvv能看到执行的详情 因为时间较长,可以看到安装过程

3 在控制器中,先引用,再调用,执行该方法时

namespace App\Http\Controllers;
use Gregwar\Captcha\CaptchaBuilder; 
use Session;
class AccountController extends Controller{  
    public function captcha($tmp){   
        $builder = new CaptchaBuilder;                  //生成验证码图片的Builder对象,配置相应属性        
        $builder->build($width = 100, $height = 40, $font = null); //可以设置图片宽高及字体        
        $phrase = $builder->getPhrase();                  //获取验证码的内容         
        Session::flash('milkcaptcha', $phrase);                //把内容存入session        
        header("Cache-Control: no-cache, must-revalidate");         //生成图片        
        header('Content-Type: image/jpeg');        
        $builder->output();    
    } 
}

4  添加路由

Route::get('index/captcha/{tmp}','AccountController@captcha');    // 验证码

5 模板中调用

<img src="{{URL('index/captcha/1')}}" onclick="this.src='{{URL("index/captcha/1")}}'+Math.random()" 
width="100" height="40" border="0">

三 上传文件

public function up(Request $request){
 
    if ($request->hasFile('file')) {
     
        $images = $request->file('file');    // 1,获取一下文件
         
        $filedir = "upload";                 // 2、定义文件上传路径 默认public下
         
        $imagesName = $images->getClientOriginalName(); // 3、获取上传文件的文件名
         
        $extension = $images -> getClientOriginalExtension(); // 4、获取上传文件的后缀名
         
        $newImagesName = md5(time()).random_int(5,5).".".$extension; // 5、重新命名上传文件名字
        
        $info = $images->move($filedir,$newImagesName);  //6、使用move方法移动文件
         
        if($info){
         
        //把自己需要的数据返回
         
            return response()->json(array(
             
            'code'=>1,'msg'=>'图片上传成功','data'=>array('src'=>$filedir.'/'.$newImagesName)));
             
        }else{
 
            exit(json_encode(array('code'=>-1,'msg'=>'图片上传失败')));
        }
         
    }
     
}

第二种方式

设置配置文件 config/filesystems.php

'disks' => [
 
        'public' => [
         
            'driver' => 'local',
             
            'root' => storage_path('app/public'),
             
            'visibility' => 'public',
             
        ],
 
        // 添加自己要使用的地址
         
        'upload' => [
         
            'driver' => 'local','
             
             'root' => storage_path('app/uploads'),   // 对应地址是 storage/app/uploads
              
        ]
 
    ],


控制器

public function up(Request $request){
 
    if($request->isValid){
     
        $images = $request->file('file');                       // 1,获取一下文件
         
        $imagesName = $images->getClientOriginalName();         // 2、获取上传图片的文件名
         
        $extension = $images -> getClientOriginalExtension();   // 3、获取上传图片的后缀名
         
        $realPath = $images ->getRealPath();                    // 4 获取临时地址
          
        $bool = Storage::disk('uploads')->put($filename,file_get_contents($realPath));  // 5 移动文件 uploads是之前配置文件里的
         
        //  use Illuminate\Support\Facades\Storage;
         
        if($bool){
         
        //把自己需要的数据返回
         
            return response()->json(array(
             
            'code'=>1,'msg'=>'图片上传成功','data'=>array('src'=>$filedir.'/'.$newImagesName)));
             
        }else{
 
            exit(json_encode(array('code'=>-1,'msg'=>'图片上传失败')));
        }
         
    }
     
}

四 缓存

配置文件 config\cache.php

<?php
 
return [
 
    'default' => env('CACHE_DRIVER', 'file'),
 
    'stores' => [
 
        'apc' => [
         
            'driver' => 'apc',
             
        ],
 
        'array' => [
         
            'driver' => 'array',
             
        ],
 
        'database' => [
         
            'driver' => 'database',
             
            'table' => 'cache',
             
            'connection' => null,
             
        ],
         
        'file' => [
         
            'driver' => 'file',
             
            'path' => storage_path('framework/cache'),
             
        ],
 
        'memcached' => [
         
            'driver' => 'memcached',
             
            'servers' => [
             
                [
                 
                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),
                     
                    'port' => env('MEMCACHED_PORT', 11211),
                     
                    'weight' => 100,
                     
                ],
                 
            ],
             
        ],
         
 
        'redis' => [
         
            'driver' => 'redis',
             
            'connection' => 'default',
             
        ],
 
    ],
 
    'prefix' => 'laravel',
 
];

默认缓存以文件形式存放在storage/framework/cache目录下

<?php 
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;   // 引入缓存类
class ArticleController extends Controller 
{    
    public function details(Request $request,$id){
 
// 文章详情 第一次使用数据库查询第二次使用缓存
        if(!Cache::has('article'.$id)){
            $article = Db::table('article')->where('id',$id)->first();        
            Cache::put('article'.$id,$article,10);          
        }else{         
            $article = Cache::get('article'.$id);             
        }
    }
}

设置缓存

Cache::put('key','value', $minutes);
 
Cache::add('key','value', $minutes);
  
Cache::forever('key','value');     // 永久生效

获取缓存

Cache::get('key');
 
Cache::pull('key');   // 获取后删除

删除

Cache::forget('key');
 
Cache::flush();      // 删除所有缓存

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值