Reputation: 51
I get the error
Undefined variable: user (View: D:\wamp64\www\project\resources\views\admin\user\updateUser.blade.php)
But I can't find the problem why $user is an undefined variable. For the form I use laravel form model binding.
UserController.php
<?php namespace App\Http\Controllers;
use App\Http\Requests\UserFormRequest;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Session;
use \App\Http\Requests\Auth\RegisterRequest;
class UserController extends Controller {
public function index()
{
// show the list of all users
$users = \App\User::all();
$User = new \App\User();
$userRoleOptions = \App\Roles::pluck('role_name', 'id');
return view('admin.user.indexUser', ['users' => $users, 'User' => $User, 'userRoleOptions' => $userRoleOptions]);
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function delete($id)
{
//find the right user
$user = \App\User::findorfail($id);
// delete the found user
$user->delete();
$users = \App\User::all();
return view('admin.user.indexUser')->with('users', $users);
}
/**
* Store a newly created resource in storage.
*
* @return Response
*/
protected function create(RegisterRequest $request) {
//validate the user input
$this->validate($request, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6'
]);
//fill the input in the database
$temp = \App\User::create();
$temp->name = $request->name;
$temp->email = $request->email;
$temp->password = bcrypt($request->password);
$temp->role_id = $request->role_id;
$temp->save();
//return user feedback
Session::flash ( 'flash_message', 'Account is succesvol aangemaakt!');
$users = \App\User::all();
$User = new \App\User();
$userRoleOptions = \App\Roles::pluck('role_name', 'id');
return view('admin.user.indexUser', ['users' => $users, 'User' => $User, 'userRoleOptions' => $userRoleOptions]);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
//find the right user
$user = \App\User::find($id);
$User = new \App\User();
$userRoleOptions = \App\Roles::pluck('role_name', 'id');
//return the edit page of the fount user
return view('admin.user.updateUser', array('user' => $user, 'User' => $User, 'userRoleOptions' => $userRoleOptions));
}
public function update(UserFormRequest $request)
{
// find the right user
$user = \App\User::findorfail($request->input('id'));
// validate user input
$this->validate ( $request, [
'name' => 'required',
'email' => 'required'
] );
// this 'fills' the user model with all fields of the Input that are fillable
// if statment checks if password is right en if filled it changes the password
$user->name = $request ['name'];
$user->email = $request ['email'];
if (strlen ( $request ['password'] ) > 6) {
$user->password = bcrypt ( $request ['password'] );
} elseif (strlen ( $request ['password'] ) > 0) {
return redirect ()->back ();
}
$user->role_id = $request['role_id'];
$user->save (); // no validation implemented
Session::flash ( 'flash_message', 'Account is succesvol gewijzigd!');
$users = \App\User::all();
$User = new \App\User();
$userRoleOptions = \App\Roles::pluck('role_name', 'id');
return view('admin.user.updateUser', ['users' => $users, 'User' => $User, 'userRoleOptions' => $userRoleOptions]);
}
}
Model User
<?php namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract {
use Authenticatable, CanResetPassword;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'email', 'password', 'role_id'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = ['password', 'remember_token'];
public function mail_entry(){
return $this->hasOne('\App\Mail_entry');
}
public function role()
{
return $this->hasMany('\App\Roles', 'id', 'role_id');
}
}
UpdateUser blade
<div class="modal fade" id="user-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Wijzigen</h4>
</div>
<div class="modal-body">
<div stype="padding:10px;">
{!! Form::model($user, ['route' => 'update_user', 'id' => 'edit-user-form']) !!}
@include('admin/user/partials/_user-form', ['user' => $user, 'submit_tekst' => 'Gebruiker updaten'])
{!! Form::close() !!}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" id="save-user">Opslaan</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Annuleer</button>
</div>
</div>
</div>
<script type="text/javascript">
var x = $('#user-modal :submit');
console.log(x);
$('#user-modal :submit').remove();
$('#save-user').click(function(){
$.ajax({
url : '{!! URL::route('update_user'); !!}',
type: 'post',
data : $('#edit-user-form').serialize(),
success : function(result){
console.log("succes" + result);
},
error: function(result) {
console.log("error" + result);
if( result.status === 422 ) {
//process validation errors here.
var errors = result.responseJSON; //this will get the errors response data.
//show them somewhere in the markup
//e.g
errorsHtml = '<div class="alert alert-danger"><ul>';
$.each(errors, function( key, value ) {
errorsHtml += '<li>' + value[0] + '</li>'; //showing only the first error.
});
errorsHtml += '</ul></div>';
$( '#edit-user-form' ).append( errorsHtml );
}
}
});
console.log('gelukt');
});
</script>
Upvotes: 2
Views: 846
Reputation: 4917
The public function update()
is not passing the variable $user to the view you provided as redirection.
Usually when you edit a user you want to return back()
to the edit page with the changes made.
I would recommend using a more simpler syntax for passing variables to the view:
return view('path.to.view', compact('user', 'users', 'foo', 'bar'));
Another point you could improve is in routes. Read up on Laravel Implicit Binding.
Upvotes: 0