看似正确的路由获取错误路由未定义! - Laravel 4

时间:2014-01-01 12:46:11

标签: php laravel laravel-4

我正在使用Laravel 4.1开发一个非常基本的应用程序,用户可以注册并提出问题,非常基本的东西。我现在对于在laravel 3中看起来像这个公共$ restful = true的宁静方法有点困惑。从那时起,laravel已经发生了很大变化,我被这个宁静的想法所困扰。所以我决定离开它继续开发我的应用程序的骨架。一切顺利,直到我在homeController中创建postCreate方法,让授权用户通过表单提交问题。我相信我正确地路由了这个方法,并且index.blade.php视图也没问题。我只是想不通为什么我得到这个跟随错误,即使代码似乎没问题。

Route [ask] not defined. (View: C:\wamp\www\snappy\app\views\questions\index.blade.php)

如果你得到了我在做错的话,如果你用一点解释指出它,我将不胜感激。 我在laravel 4中是全新的,虽然在之前的版本中有一点经验。

这是我在HomeController.php

中的内容
<?php

class HomeController extends BaseController {

    public function __construct() {

        $this->beforeFilter('auth', array('only' => array('postCreate')));
    }

    public function getIndex() {

        return View::make('questions.index')
            ->with('title', 'Snappy Q&A-Home');
    }

    public function postCreate() {

        $validator = Question::validate(Input::all());

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

            return Redirect::route('home')
                ->with('message', 'Your question has been posted!');
        }

        return Redirect::route('home')
            ->withErrors($validator)
            ->withInput();
    }

}

这就是我在routes.php文件中的内容

<?php

Route::get('/', array('as'=>'home', 'uses'=>'HomeController@getindex'));
Route::get('register', array('as'=>'register', 'uses'=>'UserController@getregister'));
Route::get('login', array('as'=>'login', 'uses'=>'UserController@getlogin'));
Route::get('logout', array('as'=>'logout', 'uses'=>'UserController@getlogout'));

Route::post('register', array('before'=>'csrf', 'uses'=>'UserController@postcreate'));
Route::post('login', array('before'=>'csrf', 'uses'=>'UserController@postlogin'));
Route::post('ask', array('before'=>'csrf', 'uses'=>'HomeController@postcreate')); //This is what causing the error

最后在views / questions / index.blade.php

@extends('master.master')

@section('content')

    <div class="ask">

        <h2>Ask your question</h2>

        @if( Auth::check() )

            @if( $errors->has() )
                <p>The following erros has occured: </p>

                <ul class="form-errors">
                    {{ $errors->first('question', '<li>:message</li>') }}
                </ul>
            @endif

            {{ Form::open( array('route'=>'ask', 'method'=>'post')) }}

                {{ Form::token() }}

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

                {{ Form::submit('Ask', array('class'=>'btn btn-success')) }}

            {{ Form::close() }}

        @endif

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

@stop

请询问您是否需要任何其他代码实例。

2 个答案:

答案 0 :(得分:3)

您的'ask'路线未命名。当您将'route' => 'foo'传递给Form::open时,假设您有一条名为'foo'的路线。将'as' => 'ask'添加到您的/询问路线,它应该有效。

或者,使用URL或Action代替解析表单的目标网址:

Form::open(['url' => 'ask']);
Form::open(['action' => 'HomeController@postCreate']);

答案 1 :(得分:2)

您在表单中使用的名称路由ask不存在。我为你创建了名称route ask

Route::post('ask', array('before'=>'csrf', 'as' => 'ask', 'uses'=>'HomeController@postcreate'));


{{ Form::open( array('route'=>'ask', 'method'=>'post')) }}
                       ^^^^ -> name route `ask`
                {{ Form::token() }}