我正在尝试使用项目的总票数更新数据库中的列。我遇到了404问题,但我的路线中没有看到问题。 (PS:Laravel 3)
这是我在每个项目上的投票按钮:
{{ Form::open('project/addvote', 'VOTE') }}
{{ Form::hidden('id', $project->id) }}
{{ Form::submit('Vote') }}
{{ Form::close() }}
因此,当您点击投票按钮时,它会使用以下路线:
Route::put('project/addvote', array('uses'=>'projects@addvote'));
这是我在项目控制器中的操作(尚未更新,只是尝试重定向):
public function put_addvote(){
return Redirect::to_route('project', $id)
->with('message', 'Vote successful');
}
重定向到此路线:
Route::get('project/(:num)', array('as'=>'project', 'uses'=>'projects@project'));
这让我得到404错误
感谢每一个回复和这里的大力帮助!
答案 0 :(得分:1)
实际上, Redirect::to_route
期望路由的名称重定向到它,并且必须使用名称声明命名路由,例如
Route :: put('project / addvote',array('as'=>'project','uses'=>'projects @ addvote'));
因此,您可以使用它;名称可以像
返回Redirect :: to_route('project');
此处, project
已使用'as' => 'project'
作为其名称。在你的例子中,你没有给路线命名,这里是
Route :: put('project / addvote',array('uses'=>'projects @ addvote'));
, as => 'route_name'
缺失。
对于第二个问题,您可以将其作为
$id = Input::get('id');
Project::find($id);
Project->votenumber = 5;
Project->->save();
这有点让人困惑但是在通过评论系统进行对话后,路由的答案如下:
你(OP)提到你有一条声明为
的路线 Route::get('projets', array('as'=>'projets', 'uses'=>'projets@index'));
您要尝试使用此
重定向到此路线return Redirect::to_route('project', $id);
所以,你传递一个参数并且它不在你的路线声明中,这就是问题,所以要克服这个改变你的路线声明
Route::get('projets/(:num)', array('as'=>'projets', 'uses'=>'projets@index'));
或者
Route::get('projets/(:any)', array('as'=>'projets', 'uses'=>'projets@index'));
或者,您可以使用?
使参数可选,例如:
Route::get('projets/(:any?)', array('as'=>'projets', 'uses'=>'projets@index'));
你应该用问题发布原始代码,无论如何,改变这个
return Redirect::to_route('project', $id);
到
return Redirect::to_route('project', array($id));