1

我对 Laravel 真的很陌生,并且正在尝试让一个表单正常工作。

所以我有一个页面(管理员/索引),它只有一个表单,它的路由映射到 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!');
    }

}

就像我说的,在 admin/index 上的简单表单提交,但它没有提交给控制器,只是提交给 NotFoundHttpException。

编辑:表单的 HTML 如下所示:

<form method="GET" action="http://localhost/showknowledge/admin/test/" 
accept-charset="UTF-8">   
 <input name="info" type="text">
</form>
4

1 回答 1

3

将您的路由逻辑移入AdminController并使用RESTful 控制器可能更清楚:

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

希望有帮助

于 2013-08-15T20:12:32.493 回答