laravel 使用用户函数验证
laravel validate with user function
blade.php
......
<tr>
<td>{{ Form::label('cameraMac', 'Mac: ') }}</td>
<td>{{ Form::text('cameraMac')}}</td>
</tr>
......
controller.php
$data = Input::all();
function transform($cameraMac) {
return strtoupper($cameraMac);
}
//validation here
$user = User::find($data['user_id']);
if($data["cameraMac"])
{
$user->camera_id = transform($data["cameraMac"]);
Cloud_camera::create(['id' => transform($data["cameraMac"]), 'user_id' => $user->id]);
}
$user->save();
我需要将 cameraMac 转换为主键以存储在数据库中。如何在验证规则 'nullable|unique:cloud_cameras,id|size:6'
中使用函数 transform()
。也就是说,在验证过程中如何调用这个函数。
您确定希望字段 cameraMac
可以作为(或多或少)主键为空吗?
您还应该使用 int
验证来使用 size
验证。
unique
validation 的第三个参数是 except
,它将忽略给定的 ID。
您在控制器中的验证可能如下所示
$except_id = $request->input('cameraMac', null);
$this->validate($request, [
'cameraMac' => 'nullable|unique:cloud_cameras,id,'.$except_id.'|int|size:6'
]);
One example如何在视图中显示验证错误
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
如果您需要以某种方式转换输入数据,您可以使用 merge
方法:
Input::merge(['cameraMac' => transform(Input::get('cameraMac')]);
$this->validate(Input::getFacadeRoot(), [
'cameraMac' => 'nullable|unique:cloud_cameras,id|size:6'
]);
作为个人偏好,我会在控制器方法中输入提示 Illuminate\Http\Request $request
,然后
$request->merge(['cameraMac' => transform($request->cameraMac)]);
$this->validate($request, ['cameraMac' => 'nullable|unique:cloud_cameras,id|size:6'
]);
现在我先传输输入数据,然后用下面的方式验证它。
但我正在寻找一种在验证中调用此函数的方法。
$data = Input::all();
$data['cameraMac'] = transform($data['cameraMac']);
$rules = array(
'id' => 'required|unique:cloud_printers,id|size:6',
'cameraMac' => 'unique:cloud_cameras,id|size:6',
);
$validator = Validator::make($data, $rules);
if ($validator->fails())
return Redirect::back()->withInput()->withErrors($validator);
我会考虑 defining a middleware。
中间件将执行转换并将结果合并回请求,然后再发送给控制器。
class TransformId {
public function handle(Request $request, Closure $next) {
// shout out to @alepeino
$request->merge(['cameraMac' => transform($request->cameraMac)]);
return $next($request);
}
}
你可以定义一个custom validation rule:
Validator::extend('transformUpper', function ($attribute, $value, $parameters, $validator) {
return strtoupper($value);
});
然后像往常一样在请求中使用新规则:
$this->validate($request, [
'cameraMac' => 'required|transformUpper'
]);
blade.php
......
<tr>
<td>{{ Form::label('cameraMac', 'Mac: ') }}</td>
<td>{{ Form::text('cameraMac')}}</td>
</tr>
......
controller.php
$data = Input::all();
function transform($cameraMac) {
return strtoupper($cameraMac);
}
//validation here
$user = User::find($data['user_id']);
if($data["cameraMac"])
{
$user->camera_id = transform($data["cameraMac"]);
Cloud_camera::create(['id' => transform($data["cameraMac"]), 'user_id' => $user->id]);
}
$user->save();
我需要将 cameraMac 转换为主键以存储在数据库中。如何在验证规则 'nullable|unique:cloud_cameras,id|size:6'
中使用函数 transform()
。也就是说,在验证过程中如何调用这个函数。
您确定希望字段 cameraMac
可以作为(或多或少)主键为空吗?
您还应该使用 int
验证来使用 size
验证。
unique
validation 的第三个参数是 except
,它将忽略给定的 ID。
您在控制器中的验证可能如下所示
$except_id = $request->input('cameraMac', null);
$this->validate($request, [
'cameraMac' => 'nullable|unique:cloud_cameras,id,'.$except_id.'|int|size:6'
]);
One example如何在视图中显示验证错误
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
如果您需要以某种方式转换输入数据,您可以使用 merge
方法:
Input::merge(['cameraMac' => transform(Input::get('cameraMac')]);
$this->validate(Input::getFacadeRoot(), [
'cameraMac' => 'nullable|unique:cloud_cameras,id|size:6'
]);
作为个人偏好,我会在控制器方法中输入提示 Illuminate\Http\Request $request
,然后
$request->merge(['cameraMac' => transform($request->cameraMac)]);
$this->validate($request, ['cameraMac' => 'nullable|unique:cloud_cameras,id|size:6'
]);
现在我先传输输入数据,然后用下面的方式验证它。
但我正在寻找一种在验证中调用此函数的方法。
$data = Input::all();
$data['cameraMac'] = transform($data['cameraMac']);
$rules = array(
'id' => 'required|unique:cloud_printers,id|size:6',
'cameraMac' => 'unique:cloud_cameras,id|size:6',
);
$validator = Validator::make($data, $rules);
if ($validator->fails())
return Redirect::back()->withInput()->withErrors($validator);
我会考虑 defining a middleware。
中间件将执行转换并将结果合并回请求,然后再发送给控制器。
class TransformId {
public function handle(Request $request, Closure $next) {
// shout out to @alepeino
$request->merge(['cameraMac' => transform($request->cameraMac)]);
return $next($request);
}
}
你可以定义一个custom validation rule:
Validator::extend('transformUpper', function ($attribute, $value, $parameters, $validator) {
return strtoupper($value);
});
然后像往常一样在请求中使用新规则:
$this->validate($request, [
'cameraMac' => 'required|transformUpper'
]);