返回控制器参数错误


wrong parameter returning to controller

我正在运行Lavarel并越过以下代码:

{{ link_to_route('users.edit', 'Edit', array($user->id), array('class' => 'btn btn-info')) }}

这是./app/views/users/edit.blade.php

@extends('users.scaffold')
@section('main')
<h1>Edit User</h1>
{{ Form::model($user, array('method' => 'patch', 'route' => array('users.update', $user->id))) }}
<ul>
    <li>
      {{ Form::label('username', 'Username: ') }}
      {{ Form::text('username') }}
    </li>
    <li>
      {{ Form::label('password', 'Password: ') }}
      {{ Form::text('password') }}
    </li>
    <li>
      {{ Form::label('email', 'Email: ') }}
      {{ Form::text('email') }}
    </li>
    <li>
      {{ Form::label('phone', 'Phone: ') }}
      {{ Form::text('phone') }}
    </li>
    <li>
      {{ Form::label('name', 'Name: ') }}
      {{ Form::text('name') }}
    </li>
    <li>
      {{ Form::submit('Update', array('class' => 'btn btn-info')) }}
      {{ link_to_route('users.show', 'Cancel', $user->id, array('class' => 'btn')) }}
    </li>
</ul>
{{ Form::close() }}
@if (($errors->any()))
  <ul>
    {{ implode('', $errors->all('<li class="error">:message</li>')) }}
  </ul>
@endif
@stop

以上代码在模板文件edit.blade.php中,当用户点击Edit按钮时,将用户id $user->id传递给定义了编辑动作的控制器UsersController@edit

public function edit($id)
{
    $user = User::find($id);
    if(is_null($user)) {
        return 'Not found: '.$id;
        // return Redirect::route('users.index');
    }
    return Redirect::route('users.edit', compact('user'));
}

这里的问题是$id不是从link_to_route()函数传递的。谁能帮我找出问题在哪里吗?谢谢。

下面是DOM的结果:

<a href="http://laravel.learn/users/1/edit" class="btn btn-info">Edit</a>

routes.php

Route::resource('users', 'UsersController');

这是点击编辑按钮后的结果:

Not found: {"id":1,"username":"john","password":"johndoe","email":"johndoe@gmail.com","phone":"123456","name":"John","created_at":"2013-06-07 08:13:28","updated_at":"2013-06-07 08:13:28"}

根据您的信息-看起来问题不是link_to_route() -您可以看到错误在您的代码中进一步。

看起来您已经将路由绑定到模型,因此在编辑函数中$id实际上是已经从数据库中填充的$user

你可以告诉这种情况-因为你的自定义"not found"错误给了你用户数据。

如果你把你的代码改成这样-它能工作吗?

public function edit(User $user)
{
    return Redirect::route('users.edit', compact('user'));
}