我对Laravel来说真的很陌生,我正试图让一个表格一般地工作。
所以我有一个页面(admin / index),它只有一个表单,其中包含映射到AdminController @ test的路由。表单提交正常,但后来我得到一个NotFoundHttpException。 :(
index.blade.php中表单构建器的代码是:
@extends('layouts.master')
@section('title')
Admin
@stop
@section('content')
{{ Form::open(array('route' => 'test', 'method' => 'get')) }} <!-- Works with AdminController@index -->
{{ Form::text('info') }}
{{ Form::close() }}
@stop
有问题的路线是:
Route::get('/admin/test/' , array( 'as' => 'test' ,
'uses' => 'AdminController@test'));
有问题的控制器是:
class AdminController extends BaseController{
public function index(){
return View::make('admin.index');
}
public function test(){
error_log('Yay!');
}
}
就像我说的那样,管理员/索引上的简单表单,提交,但它不会进入控制器,只是对NotFoundHttpException。
编辑: 表单的HTML如下所示:
<form method="GET" action="http://localhost/showknowledge/admin/test/"
accept-charset="UTF-8">
<input name="info" type="text">
</form>
答案 0 :(得分:3)
将路由逻辑移到AdminController
并使用RESTful controller可能会更清楚:
routes.php
中添加此内容,并删除/admin/index
和/admin/test
的两个路由定义:
Route::controller('admin' , 'AdminController');
这会将admin/
的所有请求定向到您的AdminController。现在你需要重命名你的函数以包含HTTP动词(GET,POST或任何),以及你的路线的下一个组成部分:
public function getIndex() // for GET requests to admin/index
{
//blha blah blah
}
public function getTest() // for GET requests to admin/test
{
//blha blah blah
}
最后,更新您的表单,直接通过action
关键字
{{ Form::open(array('action' => 'AdminController@getTest', 'method' => 'get')) }}
请注意,使用missingMethod()
来捕获未处理的请求也非常有用,Laravel文档中的更多信息:http://laravel.com/docs/controllers#handling-missing-methods
希望有所帮助