【问题标题】:Laravel 5.1 $this->validate(...) throws errorLaravel 5.1 $this->validate(...) 抛出错误
【发布时间】:2016-01-04 10:52:43
【问题描述】:

我正在尝试使用 laravel 的验证 (http://laravel.com/docs/5.1/validation) 向我的资源控制器添加验证,但我收到此错误:

ErrorException in ValidatesRequests.php line 30:
Argument 1 passed to App\Http\Controllers\Controller::validate() must be an 
instance of Illuminate\Http\Request, 
instance of Illuminate\Support\Facades\Request given,
called in 
/Users/lextoc/Documents/Sites/partyrecycler/app/
Http/Controllers/MarkerController.php on line 30 and defined

这是控制器:

namespace App\Http\Controllers;

use Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Marker;

class MarkerController extends Controller
{
    ...

    public function create()
    {
        return view('markers.create');
    }

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

        $marker=Request::all();
        Marker::create($marker);
        return redirect('markers');
    }

    ...
}

还有观点:

<h1>Create marker</h1>
@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
{!! Form::open(array('route' => 'markers.store')) !!}
    {!! csrf_field() !!}

    <div>
        Name
        <input type="text" name="name">
    </div>

    <div>
        x
        <input type="text" name="x">
    </div>

    <div>
        y
        <input type="text" name="y">
    </div>

    <div>
        <button type="submit">Create</button>
    </div>
{!! Form::close() !!}

我不知道为什么它使用了错误的Request类,为什么控制器中使用了两个?

【问题讨论】:

  • print_r($request)看看有没有数据

标签: php validation laravel-5.1


【解决方案1】:

错误是由于您的包含标题:

试试

use Illuminate\Http\Request;

代替

use Request;

例子:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Marker;

【讨论】:

  • 然后我得到这个错误:非静态方法 Illuminate\Http\Request::all() 不应该被静态调用,假设 $this 来自不兼容的上下文。我检查了stackoverflow.com/questions/28573860/laravel-requestall,他建议把它改回来
  • 哦,我明白了。而不是调用$marker=Request::all();,您应该调用:$marker=$request-&gt;all();
  • 不用担心 :)。很高兴为您提供帮助
猜你喜欢
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
相关资源
最近更新 更多