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

一 表单

1 传统表单提交

控制器验证

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

前端显示错误

@if (count($errors) > 0)
 
    
    @foreach ($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif

2 ajax


控制器验证

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部分定义一个数组,存储地址

再使用数组填写地址

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 模板中调用

三 上传文件

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

 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目录下

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();      // 删除所有缓存

 

你可能感兴趣的:(laravel)