PostTooLarge异常Laravel

时间:2018-07-16 05:47:27

标签: laravel laravel-5 exception-handling

我上传了15mb的图片,它抛出了PostTooLarge Exception的异常,而不是异常,我必须显示Flash错误消息,但无法获取它。

下面是我用于Handler.php的处理程序,它工作得很好,但不显示Flash消息。

if ($exception instanceof \Illuminate\Http\Exceptions\PostTooLargeException) 
{
        return redirect()->route('users.add')->withFlashError('Image Size too large!');
}

然后我在如下所示的控制器中尝试了laravel的validate来实现图像

$validator = Validator::make($request->all(), [
                'image' => 'max:4000',
            ]);
if ($validator->fails()) 
{
        return redirect()->route('user')->withFlashError('Image size exceeds 4MB');                 
}

但仍然没有运气

下面是具有以下格式的刀片文件:

<form method="post" action="{{route('users.submit')}}" id="adduser" enctype="multipart/form-data">
                            {{csrf_field()}}
                            <div class="form-group">
                                <div class="form-row">
                                    <div class="form-group col-md-6">
                                        <label  class="col-form-label">User name*</label>
                                        <input type="text" class="form-control" name="name" placeholder="User name" value="{{ old('name') }}">
                                    </div>
                                    <div class="form-group col-md-6">
                                        <label  class="col-form-label">User email*</label>
                                        <input type="text" class="form-control" name="email"  value="{{ old('email') }}" placeholder="User email" autocomplete="off">
                                    </div>
                                </div>
                            </div>
                            <div class="form-group">
                                <div class="form-row">
                                    <div class="form-group col-md-6">
                                        <label  class="col-form-label">Password*</label>
                                        <input id="password" type="password" class="form-control" name="password" placeholder="Password">
                                    </div>
                                    <div class="form-group col-md-6">
                                        <label  class="col-form-label">Confirm password</label>
                                        <input type="password" class="form-control" name="confirmpassword" placeholder="Confirm password">
                                    </div>
                                </div>
                            </div>
                            <div class="form-group">
                                <div class="form-row">
                                    <div class="form-group col-md-6">
                                        <label  class="col-form-label">Phone number*</label>
                                        <input type="text" class="form-control" name="mobile" value="{{ old('mobile') }}" placeholder="Phone Number">
                                    </div>                              
                                    <div class="col-md-6">
                                        <label  class="col-form-label">User role*</label>
                                        <select name="role" class="form-control valid">
                                            <option   value="">Select Role</option>
                                            <option {{ old('role')==3?'selected':'' }} value="3">Author</option>
                                            <option {{ old('role')==5?'selected':'' }} value="5">Product Admin</option>
                                        </select>
                                    </div>
                                </div>      
                            </div>
                            <div class="form-group">
                                <div class="form-row">
                                    <div class="col-md-6">
                                            <label  class="col-form-label">User image</label>
                                            <div class="card-body">
                                                <div class="was-validated">
                                                    <label class="custom-file">
                                                        <input type="file" name="image" accept=".jpg, .png,.jpeg" id="file" class="custom-file-input">
                                                        <span class="custom-file-control"></span>
                                                    </label>
                                                    <ul class="preview" style="margin-top: 10px;"> 

                                                    </ul>
                                                </div>
                                            </div>
                                        </div>                                  
                                </div>
                            </div>  
                            <button style="float: right;" type="submit" class="btn btn-primary" id="validateForm">Save</button>
                        </form>

和下面是控制器代码:

<?php

namespace App\Http\Controllers\admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;
use Validator;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
       $users = User::whereNotIn('role', array(1,4))->orderBy('id','DESC')->get();
       return view('admin.users.index',compact('users'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.users.add');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $data=$request->all();

        $validate = Validator::make($data, [
            'email' => 'required|string|email|max:255|unique:users',      
        ]);

        if ($validate->fails()) {
            return redirect('users/add')->withFlashError('Email already exists')->withInput();
        }
        if(isset($_FILES['image']))
        {
            $validator = Validator::make($request->all(), [
                'image' => 'max:4000',
            ]);
            if ($validator->fails()) 
            {
                //return redirect()->route('user')->withFlashError('Image size exceeds 4MB'); 
                //return redirect()->route('user')->withErrors(['error' => 'Image size exceeds 4MB']);
                //return redirect('users/add')->withFlashError('Image size exceeds 4MB')->withInput();
                return redirect()->back()->withErrors(['error' => 'Image size exceeds 4MB']);                
            }
            if(basename($_FILES['image']['name']) != "")
            {
                $target_path = base_path().'/public/user/';
                $time=round(microtime(true));
                $newfilename = $target_path .$time . '.jpg'; 
                $target_path = $target_path .time().basename($_FILES['image']['name']);

                if (move_uploaded_file($_FILES['image']['tmp_name'], $newfilename)) 
                {
                    $user_data['image'] =$time.'.jpg';  
                }
            } 
            else
            {
                $user_data['image'] = "";   
            }
        }
        $insert_data = array
                    (
                        "name" => $data['name'],
                        "email" => $data['email'],
                        "password" => bcrypt($data['password']),
                        "mobile" => $data['mobile'],
                        "image" => $user_data['image'],        
                        "role" => $data['role'],
                        "status" => 1
                    );
        User::create($insert_data);
        return redirect()->route('users')->withFlashSuccess('User added successfully');            
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
       $user = User::find($id);    
       $user->delete(); 
       return redirect()->route('users')->withFlashSuccess('User deleted successfully');
    }

    public function delete($id)
    {
         $news = User::find($id);    
         $news->delete();      
    }

    public function status($id)
    {
        $store=User::find($id);
        if($store->status==1)
        {
            $status=0;
        }
        else
        {
            $status=1;
        }
        User::whereId($id)->update(array('status'=>$status));
        return redirect()->route('users')->withFlashSuccess('User status changed');
    }

    public function saverole(Request $request)
    { 
        $data=$request->all();
        $string_role = implode(', ', $data['role']);
        User::whereId($data['user_id'])->update(array('role'=>$string_role));
        return redirect()->route('users')->withFlashSuccess('User role changed');
    }
}

2 个答案:

答案 0 :(得分:0)

将您的验证代码行更改为此:

    $this->validate(request(), [ 
                'image' => 'max:4000'
            ],
[
'image.max' => 'Image size exceeds 4MB'
]);

在您的视图文件中,运行以下代码以显示错误:

@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif   

答案 1 :(得分:-2)

由于 php.ini 在引发异常时排在第一位,因此不会将期望转移到定义的错误中。