将值传递给URL - REST样式

时间:2014-12-27 23:50:02

标签: laravel laravel-4 laravel-routing

<h1>Edit page of {{ $user->username }}</h1>
{{ Form::open(['route' => 'user.store']) }}
... the rest of the view

这是我的login视图。控制器中store方法中的相关代码如下所示:

if (Auth::attempt(Input::only('username', 'password'))) {
     $user = Auth::user();
     return Redirect::route('user.show', ['user' => $user]);
}

show方法:

public function show($user)
{
   return View::make('user.edit', ['user' => $user]);
}

我得到.../user/%7Buser%7D作为网址(我希望它是,例如。.../user/exampleusername),也是例外:ErrorException: Trying to get property of non-object

当我在dd($user)方法中show(或在视图中,并不重要)时,我只得到string[6] {user},这意味着我没有通过{{ 1}}成功转到$user路线。

官方文档提供了这个示例:user.show这似乎与我的案例相关,我认为在我的代码中应该是这样的:return Redirect::route('profile', array('user' => 1));

有趣的是,如果在return Redirect::route('user.show', ['user' => $user]);方法中我尝试从会话中获取用户对象(show),并将其转储,如下所示:

Auth::user()

它仍然是NULL,但如果我将其转储到public function show($user) { $user = Auth::user(); dd($user); ... 方法:

index

,然后它返回正确的对象,充满了参数和值...我不知道发生了什么,为什么在一种方法中我有会话对象,但在另一种方法中,我不知道

有关如何解决此问题的任何建议?

更新:我将其缩小到public function index() { if (Auth::check()) { dd(Auth::user()); ... 方法中的此实现:

store

并在return Redirect::route('user.show')->with('user', $user); 方法中:

show

因为显然唯一可以传递将爆炸成单个变量的数组的地方是$user = Session::get('user'); return View::make('user.edit', ['user' => $user]); ,而View::makeRedirect::toRedirect::action等等。 ,您必须使用Redirect::route功能。然后,这些值将在->with('key', $value)单例中提供。

尽管如此,我仍然在网址中获得Session。而且我不知道如何摆脱这个......

1 个答案:

答案 0 :(得分:0)

您需要将id用户传递到user.show路由,而不是$user本身。

return Redirect::route('user.show', [$user->id]);