Laravel 4.1中重定向的问题

时间:2014-04-19 04:08:21

标签: php redirect laravel frameworks

我今天刚开始尝试Laravel 4.1,而且我不得不使用Laravel 4.0的教程,因此我不得不对代码的某些部分进行故障排除。 有一部分我无法排除故障,我需要一些帮助。

这些是涉及的路线:

Route::get('authors/{id}/edit', array('as'=>'edit_author', 'uses'=>'AuthorsController@get_edit'));

Route::put('authors/update', array('uses'=>'AuthorsController@put_update'));

这些是控制器中的操作:

public function get_edit($id){
   return View::make('authors.edit')->with('title', 'Edit Author')->with('author', Author::find($id));
}

public function put_update(){
    $id = Input::get('id');
    $author = array(
            'name' => Input::get('name'),
            'bio'  => Input::get('bio'),
            );
    $validation = Author::validate($author);
    if ($validation->fails()){
        return Redirect::route('edit_author', $id);
    }else{
        Author::update($id, $author);
        return Redirect::route('view_author', $id);
    }
}

请注意,在我使用{id}而不是(:any)的路线中,因为后者对我不起作用。

在我的浏览器上,get_edit函数首先运行正常,但是当我单击提交按钮并且它应该执行put_update时,无论是应该将我重定向到view_author还是返回到edit_author,它只是给我一个NoFoundHttpException。

正如附加信息一样,我使用的默认.htacces就是这个:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

1 个答案:

答案 0 :(得分:1)

由于您使用的是4.1所以它应该{id}而不是(:any),并确保您使用正确的方式生成表单,如下所示:

Form::open(array('action' => array('AuthorsController@put_update', $author->id), 'method' => 'put'))

也使用Form::close()关闭表单。由于您没有使用RESTful控制器,因此您可以将方法名称用作update而不是put_update,而RESTful方法则使用putUpdate而不是put_update }}。因此,您可以使用如下路线:

Route::put('authors/update', array('uses'=>'AuthorsController@update'));

然后方法应该是:

public function update($id)
{
    // ...
    if ($validation->fails()){
        return Redirect::back()->withInput()->withErrors($validation);
    }
    else{
        Author::update($id, $author);
        return Redirect::route('view_author', $id);
    }
}

所以表格应该是:

Form::open(array('action' => array('AuthorsController@update', $author->id), 'method' => 'put'))

同时将您的修改route更改为:

Route::get('authors/edit/{id}', array('as'=>'edit_author', 'uses'=>'AuthorsController@edit'));

也可以在方法中进行更改:

public function edit($id)
{
    //...
}