我是Laravel的新手,我正在努力完全理解路线的运作方式。我想通过URL传递变量。我明白我是怎么做到的,但我的问题有点不同:
routes.php文件
Route::get("/user/{user}", array(
'as' => 'profile-user',
'uses' => 'ProfileController@user'
));
ProfileController.php
类ProfileController扩展了BaseController {
public function user($user) {
$user = User::where('username', '=', Session::get('theuser') );
if($user->count()) {
$user = $user->first();
return View::make('layout.profile')
->with('user', $user);
}
return App::abort(404);
}
}
在我看来,简单地说:
{{ $user->username }}
现在我的问题:这有点工作,但按下按钮后,此URL将如下所示:
[this is not a link](http://localhost/tutorial/public/index.php/user/%7Buser%7D)
如果我将URL编辑为
[this is not a link](http://localhost/tutorial/public/index.php/user/Serban)
它做同样的事情。但我不希望手动编辑URL。如何在不编辑的情况下获取第二个URL行?
答案 0 :(得分:2)
在构建表单时,请像这样传递user
参数
Form::open(array('route' => array('route-name-for-update', $user->username)))
您也可以使用表格Model Binding(详情请参阅文档):
Form::model($user, array('route' => array('user.update', $user->username)))
此处,user.update
是需要使用此名称为update方法定义的路由的路由名称。
答案 1 :(得分:1)
与此同时,对我来说更有趣的方法是做这样的事情:
Route::group(array('prefix' => 'user/{user}'), function()
{
Route::get("/{char}", array(
'as' => 'profile-user',
'uses' => 'ProfileController@user'));
}
);
控制器:
public function user($user, $char) {
$user = User::where('username', '=', Session::get('theuser') );
$char = Character::where('char_name', '=', 'Cucu' );
if($user->count()) {
$user = $user->first();
$char = $char->first();
return View::make('layout.profile')
->with('user', $user)
->with('char', $char);
}
return App::abort(404);
}
只要按一下按钮,我就无法做到这样的事情
$logged_user = Session::get('theuser');
return Redirect::route('profile-user', $logged_user);
因为我无法在Redirect函数中放入2个参数。此代码将获取URL
[this is not a link](http://localhost/tutorial/public/index.php/user/SerbanSpire)
显然不存在 正确的网址是
[this is not a link]http://localhost/CaughtMiddle/tutorial/public/index.php/user/SerbanSpire/Cucu)
其中SerbanSpire是$ user,Cucu是$ char。我怎样才能获得正确的URL?
答案 2 :(得分:0)
当您链接到路线时,您需要将参数传递给路线,如此
{{ route('profile-user', 'Serban') }}