更新用户(Laravel 4)

时间:2015-09-08 06:33:50

标签: php laravel-4

我是laravel的新手,我正在尝试更新用户,但我被困在这里。当我按下更新按钮时它没有做任何事情......

//HomeController.php

public function getUpdate($username) {

        $user = array();
        $users = User::where("username", "=", $username)->get();
        foreach ($users as $key => $value) {
            if (isset($value->username)) {
                $user['username'] = $value->username;
                $user['email'] = $value->email;
                $user['password'] = $value->password;
            }
        }

        $username = (object) $user;

        return View::make('home.update', array('username' => $username));
}

public function postUpdate($username) {
    $input = Input::all();
    $rules = array('username' => 'required|unique:users',
        'email' => 'required|unique:users|email',
        'password' => 'required'
    );
    $v = Validator::make($input, $rules);

    if ($v->fails()) {
       Redirect::to('home.update')
           ->withErrors($v)
           ->withInput(Input::except('password'));
    } else {
       $user = User::find($username);

        $user->username = Input::get('username');
        $user->email = Input::get('email');

        $user->save();
        return Redirect::to('home.index')
            ->with('message', 'Successfully updated!');
    }
}

//view
@extends('master')

@section('content')

 <div class="span12 well" style="opacity: 0.9">

 <h4>Update personal details:</h4>

{{ Form::open(array('url' => 'update/'.Auth::user()->username.'/update')) }}

@if($errors->any())
<div class="alert alert-error">
    <a href="#" class="close" data-dismiss="alert">&times;</a>
    {{ implode('', $errors->all('<li class="error">:message</li>')) }}
</div>
@endif

<div class="form-group">
    {{ Form::label('username', 'Username:') }}
    {{ Form::text('username',$username->username, array('class' => 'form-control')) }}

</div>

<div class="form-group">
    {{ Form::label('email', 'E-mail:') }}       
    {{ Form::text('email', $username->email, array('class' => 'form-control')) }}

</div>

<p>{{ Form::submit('Update', array('class' => 'btn btn-success'))}}</p>

 {{ Form::close() }}
 </div>   
@stop


//routes

Route::get('update/{username}', 'HomeController@getUpdate');
Route::post('update/{username}/update', 'HomeController@postUpdate');

1 个答案:

答案 0 :(得分:0)

试试这个:

改变这个:

{{ Form::open(array('url' => 'update/'.Auth::user()->username.'/update')) }}

分为:

{{ Form::open(array('url' => 'update/'.Auth::user()->id.'/update')) }}

您的路线必须是:

Route::post('update/{id}/update', 'HomeController@postUpdate');

你的控制器必须是:

public function postUpdate($id) { //I change this to id based on the url of your route
    $input = Input::all();
    $rules = array('username' => 'required|unique:users',
        'email' => 'required|unique:users|email',
        'password' => 'required'
    );
    $v = Validator::make($input, $rules);

    if ($v->fails()) {
        Redirect::to('home.update')
                ->withErrors($v)
                ->withInput(Input::except('password'));
    } else {
        $user = User::find($id); //User::find() only finds ID

        $user->username = Input::get('username');
        $user->email = Input::get('email');
        $user->save();

        return Redirect::to('home.index')
                        ->with('message', 'Successfully updated!');
    }
 }