Laravel显示表单错误,表单元素名称为键

问题描述 投票:3回答:3

我正在努力学习laravel。我知道Codeigniter。在codeigniter3中,我将使用函数将表单错误作为带有键作为表单名称的数组

$this -> form_validation -> error_array();

它会显示出来

array(
    'form_element1' => 'this field is required',
    'form_element2' => 'this field is required'
)

在laravel 5中有没有办法做同样的事情?

请帮忙。任何帮助都可以得到赞赏

php laravel laravel-5.2
3个回答
8
投票

Laravel控制器使用ValidatesRequests特性,提供validate方法。以下是验证请求的示例:

namespace App\Http\Controllers;

class MyController extends Controller
{

    public function store(Request $request)
    {
        $this->validate($request, [
            'subject' => 'required|max:255',
            'message' => 'required',
        ]);

        // All input is valid, do your task.
    }

}

如果用户输入未通过$this->validate()规则,则会自动将用户重定向回具有旧输入和错误的表单视图。这些错误由$errors变量(Illuminate\Support\MessageBag的一个实例)保存,以便在您的视图中显示:

@if (count($errors) > 0)
    <div class="error">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

或者你可以通过密钥获得错误:

@if($errors->has('subject'))
    {{ $errors->first('subject');}} // Printed: Subject field is required.
@endif

要回答关于如何在CI中显示错误的问题,您可以使用toArray()Illuminate\Support\MessageBag方法:

$errors->toArray()

Manual Validation

您也可以使用Validator facade手动使用验证器实例,如下所示:

namespace App\Http\Controllers;

use Validator;

class MyController extends Controller
{

    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'subject' => 'required|max:255',
            'message' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect('your-form-uri')->withErrors($validator)->withInput();
        }

        // All input is valid, do your task.
    }

}

您可以再次从上面的$errors变量中获取错误。

Form Request Validation

要使用此方法,您可以首先使用artisan CLI创建表单验证请求:

 php artisan make:request ContactRequest

它会创建一个ContactRequest类,你可以在app/Http/Request/文件夹中找到它。

namespace App\Http\Requests;

use App\Http\Requests\Request;

class ContactRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }


    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'subject' => 'required|max:225',
            'message' => 'required',
        ];
    }
}

在您的控制器方法变量而不是使用Request $request您可以使用ContactRequest $request

namespace App\Http\Controllers;

use App\Http\Requests\ContactRequest;

class MyController extends Controller
{

    public function store(ContactRequest $request)
    {
        // All input is valid, do your task.
    }

}

如果用户输入通过,它将继续在该方法上执行您的代码,否则用户将被重定向回到表单视图,当然您可以显示与上述两种方法相同的错误。


3
投票

你可以设置一个从控制器返回

return redirect->back()->withErrors($request->all());

要么

return redirect->back()->withErrors(Input::all());

你可以在视图中打印错误

@if (count($errors) > 0)
        <div class="alert alert-danger">
            <strong>Whoops!</strong> There were some problems with your input.<br><br>
            <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
            </ul>
        </div>
    @endif

0
投票

这将显示附加到其键的每条错误消息:

@foreach($errors->getMessages() as $key => $error)
    {{$key}}: {{$error[0]}}
@endforeach
© www.soinside.com 2019 - 2024. All rights reserved.