维度验证规则找不到 validateDimensions()
Dimensions validation rule cannot find validateDimensions()
我正在尝试使用图像 dimensions validation rule 在控制器中上传图像:
namespace App\Http\Controllers;
use App\ClassCategory;
use App\Http\Requests;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Validator;
class ClassCategoryController extends Controller {
public function store(Request $request) {
$validator = Validator::make($request->all(), [
'image' => 'dimensions:min_width=300,min_height=300'
]);
if ($validator->fails()) { // This is where the expection is thrown.
// ...
}
}
}
但它抛出以下异常:
BadMethodCallException in Validator.php line 3181:
Method [validateDimensions] does not exist.
in Validator.php line 3181
at Validator->__call('validateDimensions', array('image', 'ballet.jpg', array('min_width=100', 'min_height=200'), object(Validator))) in Validator.php line 484
at Validator->validate('image', 'Dimensions') in Validator.php line 424
at Validator->passes() in Validator.php line 449
at Validator->fails() in ClassCategoryController.php line 42
at ClassCategoryController->store(object(Request))
at call_user_func_array(array(object(ClassCategoryController), 'store'), array(object(Request))) in Controller.php line 80
at Controller->callAction('store', array(object(Request))) in ControllerDispatcher.php line 146
at ControllerDispatcher->call(object(ClassCategoryController), object(Route), 'store') in ControllerDispatcher.php line 94
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
...
class Controller
使用 Illuminate\Foundation\Validation\ValidatesRequests
。我在这里错过了什么?
更新
为了将来参考,我在表格中得到了 because I didn't include the enctype
attribute。如果您要上传文件,则需要这样做:
<form enctype="multipart/form-data" method="post"></form>
use
关键字被PHP每个文件用来导入使用过的部分。
所以你必须声明
use Illuminate\Foundation\Validation\ValidatesRequests;
在您的 ClassCategoryController 页面中声明。
然后在class中添加use
语句如下:
class ClassCategoryController extends Controller {
use ValidatesRequests;
public function store(Request $request) {.....
如果您使用不同版本的 Laravel,则可能会发生这种情况。您是否检查过您使用的是 Laravel 5.2 而不是旧版本(例如 Laravel 5.1,其中 dimensions
不可用)。
您可以通过 运行 以下 artisan
命令检查您的版本:
php artisan --version
然后您应该会看到如下内容:
Laravel Framework version 5.2.29
更新
运行composer update
下载Laravel v5.2.32
.
您可以通过 运行 命令 grep -ri 'validateDimensions' vendor/*
验证该方法是否存在,您应该会看到:
vendor/laravel/framework/src/Illuminate/Validation/Validator.php: protected function validateDimensions($attribute, $value, $parameters)
此功能仅添加到 Laravel recently,并于 2016 年 5 月 17 日在 Laravel v5.2.32 中发布。
我正在尝试使用图像 dimensions validation rule 在控制器中上传图像:
namespace App\Http\Controllers;
use App\ClassCategory;
use App\Http\Requests;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Validator;
class ClassCategoryController extends Controller {
public function store(Request $request) {
$validator = Validator::make($request->all(), [
'image' => 'dimensions:min_width=300,min_height=300'
]);
if ($validator->fails()) { // This is where the expection is thrown.
// ...
}
}
}
但它抛出以下异常:
BadMethodCallException in Validator.php line 3181:
Method [validateDimensions] does not exist.
in Validator.php line 3181
at Validator->__call('validateDimensions', array('image', 'ballet.jpg', array('min_width=100', 'min_height=200'), object(Validator))) in Validator.php line 484
at Validator->validate('image', 'Dimensions') in Validator.php line 424
at Validator->passes() in Validator.php line 449
at Validator->fails() in ClassCategoryController.php line 42
at ClassCategoryController->store(object(Request))
at call_user_func_array(array(object(ClassCategoryController), 'store'), array(object(Request))) in Controller.php line 80
at Controller->callAction('store', array(object(Request))) in ControllerDispatcher.php line 146
at ControllerDispatcher->call(object(ClassCategoryController), object(Route), 'store') in ControllerDispatcher.php line 94
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
...
class Controller
使用 Illuminate\Foundation\Validation\ValidatesRequests
。我在这里错过了什么?
更新
为了将来参考,我在表格中得到了 enctype
attribute。如果您要上传文件,则需要这样做:
<form enctype="multipart/form-data" method="post"></form>
use
关键字被PHP每个文件用来导入使用过的部分。
所以你必须声明
use Illuminate\Foundation\Validation\ValidatesRequests;
在您的 ClassCategoryController 页面中声明。
然后在class中添加use
语句如下:
class ClassCategoryController extends Controller {
use ValidatesRequests;
public function store(Request $request) {.....
如果您使用不同版本的 Laravel,则可能会发生这种情况。您是否检查过您使用的是 Laravel 5.2 而不是旧版本(例如 Laravel 5.1,其中 dimensions
不可用)。
您可以通过 运行 以下 artisan
命令检查您的版本:
php artisan --version
然后您应该会看到如下内容:
Laravel Framework version 5.2.29
更新
运行composer update
下载Laravel v5.2.32
.
您可以通过 运行 命令 grep -ri 'validateDimensions' vendor/*
验证该方法是否存在,您应该会看到:
vendor/laravel/framework/src/Illuminate/Validation/Validator.php: protected function validateDimensions($attribute, $value, $parameters)
此功能仅添加到 Laravel recently,并于 2016 年 5 月 17 日在 Laravel v5.2.32 中发布。