我看过这篇文章,但我认为它与我的问题无关,因为我相信我通过帖子路由正确地传递了帖子数据。
这是相关的路线代码:
Route::get('/pass', 'PageController@pass');
Route::post('/pass/{request}',['uses' => 'PageController@passController']);
我想为"pass"页面提供一个控制器方法,但为了隔离问题,我将它们分开。
以下是PageController.php中的相关方法:
public function pass(){
return view('pass')->with(array(
'title'=>'Create A Pass'
));
}
public function passRequest($request){
$data['request'] = $request;
$validator = Validator::make($request->all(), [
'studentID' => 'required|max:255',
'teacherID' => 'required|max:255',
'destination' => 'required|max:255',
]);
if ($validator->fails()) {
return redirect('/')
->withInput()
->withErrors($validator);
}
$pass = new Pass;
$pass->student = DB::table('users')->where('studentID', $request->studentID)->first()->id;
$pass->teacher = DB::table('users')->where('teacherID', $request->teacherID)->first()->id;
$pass->destination = $request->destination;
$pass->save();
return view('home')->with(array(
'title'=>'Home',
'success'=>'null'
));
}
我使用了这里所述的方法,以便将数据传递给控制器。如果这是不好的做法/过时了,我愿意接受任何建议。
这是"通行证"页面中负责发送邮寄数据的表格
<form action="{{ url('pass') }}" method="POST" class="form-horizontal">
{!! csrf_field() !!}
<fieldset>
<!-- Text input-->
<div class="container">
<div class="form-group">
<label class="col-md-4 control-label" for="studentID">Student ID</label>
<div class="col-md-3">
<input id="studentID" name="studentID" type="text" class="form-control input-md">
</div>
</div>
</div>
<!-- Text input-->
<div class="container">
<div class="form-group">
<label class="col-md-4 control-label" for="teacherID">Teacher ID</label>
<div class="col-md-3">
<input id="teacherID" name="teacherID" type="text" class="form-control input-md">
</div>
</div>
</div>
<!-- Text input-->
<div class="container">
<div class="form-group">
<label class="col-md-4 control-label" for="destination">Destination</label>
<div class="col-md-3">
<input id="destination" name="destination" type="text" class="form-control input-md">
</div>
</div>
</div>
<div class="container">
<div class="form-group">
<div class="col-sm-offset-4 col-sm-6">
<button type="submit" class="btn btn-default">
<i class="fa fa-check"></i> Create Pass
</button>
</div>
</div>
</div>
</fieldset>
</form>
在提交此表单时,我得到MethodNotAllowedHttpException异常。
如果堆栈跟踪错误会有所帮助,请告诉我。如果有任何关于风格的建议,我也持开放态度。
此表单标记将生成对URL /pass
:的POST请求
<form action="{{ url('pass') }}" method="POST" class="form-horizontal">
您的路由文件不允许这样做。它只允许对该url进行GET请求,但允许对/pass/{request}
进行POST请求。
不确定这是否只是一个复制/粘贴错误,但您的POST路由设置为调用PageController@passController
方法,但您从控制器共享的方法名为passRequest
。这些也需要匹配。
除了Jeff Lambert指出的之外,您不应该将{request}
变量放在路由中。
您应该移除它,并让laravel为您注入Request
对象。
如果您还没有处于类的顶部,请导入Request
类。
use Illuminate'Http'Request;
你的函数应该如下所示。。。
public function passRequest(Request $request)
{
...
}
如果您有额外的参数要通过URL传递,那么您可以将它们添加到路由中,并在Request $request
之后将参数添加到方法中。Laravel会想办法处理它。
试试这个。。。
Route::post('/pass/post','PageController@passController')->name('post_insert');
在您的html表单中更改为。。。
<form action="{{ route('post_insert') }}" method="POST" class="form-horizontal">
也要更改它。。。
public function passRequest(Illuminate'Http'Request $request){
....