我今天刚开始尝试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>
答案 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)
{
//...
}