我看过this帖子,但我不相信这与我的问题有关,因为我相信我通过邮寄路线正确传递了帖子数据。
以下是相关的路线代码:
Route::get('/pass', 'PageController@pass');
Route::post('/pass/{request}',['uses' => 'PageController@passController']);
我想有一个控制器方法来传递'页面,但为了隔离问题,我将它们分开了。
以下是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'
));
}
我使用了here所述的方法,以便将数据传递给控制器。如果这是不好的做法/过时,我可以接受任何建议。
这是'传递中的表格。负责发送帖子数据的页面
<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异常。
如果错误的堆栈跟踪有帮助,请告诉我。如果对风格有任何建议,我也可以这样做。
答案 0 :(得分:2)
此表单标记将生成对网址/pass
的POST请求:
<form action="{{ url('pass') }}" method="POST" class="form-horizontal">
您的路线文件不允许这样做。它只允许GET请求到该URL,但POST请求/pass/{request}
。
不确定它是否只是一个复制/粘贴错误,但您的POST路由设置为调用PageController@passController
方法,但您从控制器共享的方法名为passRequest
。那些也需要匹配。
答案 1 :(得分:2)
除了Jeff Lambert所指出的,你不应该将{request}
变量放在路线中。
你应该删除它并让laravel为你注入Request
对象。
如果您还没有在课程顶部,请导入Request
课程。
use Illuminate\Http\Request;
您的功能应如下所示......
public function passRequest(Request $request)
{
...
}
如果您有其他参数来传递URL,那么您可以将它们添加到路径中,并在Request $request
之后将参数添加到方法中。 Laravel将弄清楚如何处理它。
答案 2 :(得分:0)
尝试这个...
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){
....