3

当我提交下面详述的表单时,我得到了 MethodNotAllowedHttpException。该路线对我来说似乎是正确的,并且在语法上与其他运行良好的帖子路线相同。控制器方法存在,但即便如此,我认为异常发生在请求到达控制器之前,因为 laravel 错误页面左侧的第 4 项在第 3 项显示 findRoute 之后显示了 handleRoutingException。我很确定我没有像在 laravel 4 中那样使用 restful 路由,但那是因为教程我正在遵循 laravel 3 教程并将 hte 语法更新为 4 但就像我说的其他路由工作正常所以我无法弄清楚为什么这个不是。

模板

@extends('layouts.default')

@section('content')
<div id="ask">
    <h1>Ask a Question</h1>

    @if(Auth::check())
        @include('_partials.errors')

        {{ Form::open(array('ask', 'POST')) }}

        {{ Form::token() }}

        <p>
            {{ Form::label('question', 'Question') }}
            {{ Form::text('question', Input::old('question')) }}

            {{ Form::submit('Ask a Question') }}

        </p>

        {{ Form::close() }}
    @else

    <p>

        <p>Please login to ask or answer questions.</p>

    </p>
    @endif



</div><!-- end ask -->
@stop

路线

Route::post('ask', array('before'=>'csrf', 'uses'=>'QuestionsController@post_create'));

控制器

<?php

class QuestionsController extends BaseController {

    public $restful = true;
    protected $layout = 'layouts.default';

    public function __construct()
    {
        $this->beforeFilter('auth', array('post_create'));
    }

    public function get_index() {
        return View::make('questions.index')
            ->with('title', 'Make It Snappy Q&A - Home');
    }

    public function post_create()
    {
        $validation = Question::validate(Input::all());

        if($validation->passes()) {
            Question::create(array(
                'question'=>Input::get('question'),
                'user_id'=>Auth::user()->id
            ));

            return Redirect::Route('home')
            ->with('message', 'Your question has been posted.');

        } else {
            return Redirect::Route('register')->withErrors($validation)->withInput();
        }
    }


}
?>
4

2 回答 2

1

对于RESTful 控制器,您应该定义routeusingRoute::controller方法,即

Route::controller('ask', 'QuestionsController');

并且controller methods应该以http verb它响应的前缀为前缀,例如,您可以使用postCreate并且您拥有post_create,因此它看起来不像Restful控制器。

public $restful = true;在控制器中使用,这没有在 中使用Laravel-4,并且public $restful = true;可能导致问题,因此删除此行。

于 2013-09-13T19:06:24.497 回答
1

我相信定义public $restful = true;是它在 Laravel 3 中是如何完成的。在 Laravel 4 中,你可以在你的路由中定义一个 restful 控制器,如下所示:

Route::controller('ask', 'QuestionsController');

然后定义函数,你不会使用下划线来分隔它们。你必须像这样使用骆驼案:

public function getIndex()
{
    // go buck wild...
}

public function postCreate() 
{
    // do what you do...
}
于 2013-09-13T19:28:54.020 回答