【问题标题】:Laravel Form Request ValidationsLaravel 表单请求验证
【发布时间】:2016-09-02 11:01:51
【问题描述】:

我有一个表单请求,它根据需要验证“名称”属性。当我提交表单时,它会重定向回创建页面而不保存,但我没有收到任何错误消息。

当我对 $errors 执行 var_dump 时,它是空的。我会很感激帮助弄清楚这里发生了什么......

查看

@if($errors->any())
  <ul class="alert alert-danger">
    @foreach($errors->all() as $error)
      <li>{{ $error }}</li>
    @endforeach
  </ul>
@endif
{{var_dump($errors)}}

控制器:

<?php

namespace CRM\Http\Controllers\Settings;

use CRM\Http\Requests;
use CRM\Http\Controllers\Controller;

use CRM\Category;
use CRM\Http\Requests\CategoryFormRequest;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Session;

class CategoriesController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return void
     */
    public function index()
    {
        $categories = Category::paginate(15);

        return view('settings.categories.index', compact('categories'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return void
     */
    public function create()
    {
        return view('settings.categories.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param CategoryFormRequest $request
     */
    public function store(CategoryFormRequest $request)
    {

        Category::create($request->all());

        Session::flash('flash_message', 'Category added!');

        return redirect('settings/categories');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     *
     * @return void
     */
    public function show($id)
    {
        $category = Category::findOrFail($id);

        return view('settings.categories.show', compact('category'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     *
     * @return void
     */
    public function edit($id)
    {
        $category = Category::findOrFail($id);

        return view('settings.categories.edit', compact('category'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  int  $id
     *
     * @return void
     */
    public function update($id, Request $request)
    {
        $this->validate($request, ['name' => 'required', ]);

        $category = Category::findOrFail($id);
        $category->update($request->all());

        Session::flash('flash_message', 'Category updated!');

        return redirect('settings/categories');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     *
     * @return void
     */
    public function destroy($id)
    {
        Category::destroy($id);

        Session::flash('flash_message', 'Category deleted!');

        return redirect('settings/categories');
    }
}

表单请求:

<?php

namespace CRM\Http\Requests;

use CRM\Http\Requests\Request;

class CategoryFormRequest 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 [
            'name' => 'required'
        ];
    }

    public function messages()
    {
        return [
            'name.required' => 'Please enter a name for this category'
        ];
    }
}

路线:

Route::group(['middleware' => ['web']], function () {
    Route::resource('settings/categories', 'Settings\\CategoriesController');
    Route::resource('settings/statuses', 'Settings\\StatusesController');
    Route::get('/', function () {
        return view('welcome');
    });
});

如果我把它放在 store() 的第一行 dd($请求); 我明白了:

Request {#40 ▼
  #json: null
  #convertedFiles: null
  #userResolver: Closure {#211 ▶}
  #routeResolver: Closure {#210 ▶}
  +attributes: ParameterBag {#42 ▶}
  +request: ParameterBag {#41 ▶}
  +query: ParameterBag {#48 ▶}
  +server: ServerBag {#45 ▶}
  +files: FileBag {#44 ▶}
  +cookies: ParameterBag {#43 ▶}
  +headers: HeaderBag {#46 ▶}
  #content: null
  #languages: null
  #charsets: null
  #encodings: null
  #acceptableContentTypes: null
  #pathInfo: "/settings/categories"
  #requestUri: "/settings/categories"
  #baseUrl: ""
  #basePath: null
  #method: "POST"
  #format: null
  #session: Store {#240 ▶}
  #locale: null
  #defaultLocale: "en"
}

【问题讨论】:

  • 如果你 dd($request); 会发生什么作为商店的第一线?
  • @iKode 我已经添加了 dd($request); 的输出我的问题

标签: validation laravel request laravel-5.2


【解决方案1】:

在 laravel 5.2 中,你需要使用“web”中间件来解决你的问题,就像那样

Route::group(['middleware' => ['web']], function () {
 // here you should put your routes
  });

【讨论】:

  • 正是我所拥有的@paranoid
  • 在 web middelware 中添加所有路由
  • 我有,就像我说的...^
【解决方案2】:

因此,在 Web 中间件中包含我的路由是导致此问题的原因。显然,在最新版本的 Laravel 中假定了 web 中间件。

我从这个问题的公认答案中得到了答案:Laravel 5.2 Not returning error array

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 2016-03-11
    • 2015-06-09
    • 1970-01-01
    • 2018-02-11
    • 2020-12-11
    • 2016-05-20
    • 2019-04-12
    相关资源
    最近更新 更多