Laravel 5用于检查会话数据的自定义验证规则

时间:2015-02-22 13:24:09

标签: php laravel laravel-5

我正在制作一个网站,在注册过程中允许用户上传一些图片。图像上传器通过ajax完成,存储在会话中的数据准备好在注册成功后永久存储在数据库中。如何实现自定义验证规则以检查会话数据是否正常,因为它实际上并未绑定到特定的表单字段。

这就是它目前的工作方式:

<?php namespace App\Services;

use App\User;
use Event;
use Validator;
use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
use App\Events\UserRegistered;
use Session;

class Registrar extends Validator implements RegistrarContract {

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    public function validator(array $data)
    {
        Validator::extend('required_images', function($attribute, $value, $parameters)
        {
            if (!Session::has('images') || empty(Session::get('images'))) {
                return false;
            } else {
                return true;
            }
        });

        return Validator::make($data, [
            'first_name' => 'required_images|required|max:255',
            'last_name' => 'required|max:255',
            'discount_code' => 'max:255',
            'register_email' => 'required|email|confirmed|max:255|unique:users,email',
            'register_password' => 'required|confirmed|min:6|max:60'
        ]);
    }

如您所见,我已创建规则所需的图像,并将其绑定到first_name字段。但它与名字字段或任何其他字段无关,那么我该如何调用呢?

1 个答案:

答案 0 :(得分:1)

如果您的自定义规则不适用于验证表单数据,则不要为此制定规则。而是使用一些很酷的函数创建一个辅助类:

namespace Services;

class Helper{

    static function validateImages(){
        if (!Session::has('images') || empty(Session::get('images'))) {
                return false;
            } else {
                return true;
        }
    }

}

由于您的验证未附加到任何字段,因此请在视图中创建自定义警告:

@if (Session::has('warning'))
    <p>{{ Session::get('warning') }}</p>
@endif

... here the form elements ...

然后,您可以这样验证数据:

if (! Helper::validateImages()){
    return redirect()->back()->with("warning", "You don't have any images");
}