php - Laravel:以表单元素名称为键获取表单字段错误

标签 php laravel laravel-5

我正在尝试学习 laravel。我知道 Codeigniter。在 codeigniter3 中,我将通过使用函数

将表单错误作为以键作为表单名称的数组获取
$this -> form_validation -> error_array();

它会显示为

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

在 laravel 5 中有什么方法可以做同样的事情吗?

请帮忙。任何帮助都将不胜感激

最佳答案

Laravel Controller 使用 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() 的规则,它将自动将您的用户重定向回带有旧输入和错误的表单 View 。错误由 $errors 变量保存,该变量是 Illuminate\Support\MessageBag 的一个实例,以在您的 View 中显示它:

@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 中那样显示错误的问题,您可以使用 Illuminate\Support\MessageBagtoArray() 方法:

$errors->toArray()

手动验证

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

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 变量中获取错误,如上所示。

表单请求验证

要使用此方法,您可以先使用 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',
        ];
    }
}

在您的 Controller 方法变量上,您可以使用 ContactRequest $request 而不是使用 Request $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.
    }

}

如果用户输入通过,它将继续在该方法上执行您的代码,否则用户将被重定向回表单 View ,当然您可以像上面两种方法一样显示错误。

关于php - Laravel:以表单元素名称为键获取表单字段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37496025/

相关文章:

php - Laravel API 的创建和编辑方法应该返回什么?

php - 如何在 Laravel 中选择后对结果进行分组

php - 重复的列名 Laravel

php - Laravel 5 从另一种方法重定向

javascript - 单击中间表单上的按钮查询数据库

php - Bootstrap 3 在 Symfony3 中不起作用

php - 如何验证 PayPal 返回数据?

php - 我可以在php的if语句中运行while语句吗?

php - 在没有 aJax 的情况下在 Laravel 中使用 DataTables - 表中没有可用数据

laravel - 如何处理 laravel 5 中的私有(private)图像?