错误的参数返回控制器

时间:2014-07-23 07:57:36

标签: php laravel

我在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"}

1 个答案:

答案 0 :(得分:0)

根据您的信息 - 问题似乎不在于link_to_route() - 您可以在代码中看到错误。

看起来你已经绑定了到模型的路径,所以在编辑函数中$id实际上已经从数据库中填充了$user

您可以判断是这种情况 - 因为您的自定义“未找到”错误会为您提供用户数据。

如果您将代码更改为此 - 是否有效?

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