I have a problem with my laravel project, and I'm not able to figure out what I'm doing wrong.
My project has the following relevant files:
The controller (UserController.php):
<?php
<?php
namespace App\Http\Controllers\Admin;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
public function list()
{
$users = User::all();
return view('admin.users.list')->with('users',$users);
}
// here we create fuction for edit users
public function updateUserView(Request $request, $id)
{
$user = User::findOrFail($id);
return view('admin.users.edit')->with('user',$user);
}
// here we create function for update button
public function updateUserPut(Request $request, $id)
{
$validated = $request->validate([
'name' => 'required|max:30',
'email' => 'required|email',
'public' => 'boolean',
'phoneNumber' => '',
'usertype' => '',
'password' => 'required|confirmed|min:8|max:255',
]);
$users = User::find($id);
$users->name = $validated['name'];
$users->email = $validated['email'];
$users->public = $validated['public'];
$users->phoneNumber = $validated['phoneNumber'];
$users->usertype = $validated['usertype'];
$users->password = Hash::make($validated['password']);
$users->update();
return redirect('/admin/users')->with('status','User is updated');
}
public function createUserView()
{
return view('admin.users.create');
}
public function createUserPost(Request $request)
{
$validated = $request->validate([
'name' => 'required|max:30',
'email' => 'required|email|unique:users',
'public' => 'boolean',
'phoneNumber' => '',
'usertype' => '',
'password' => 'required|confirmed|min:8|max:255',
]);
User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'public' => $validated['public'],
'phoneNumber' => $validated['phoneNumber'],
'usertype' => $validated['usertype'],
'password' => Hash::make($validated['password'])
]);
return redirect('/admin/users')->with('status','User is created');
}
//delete function
public function deleteUser($id)
{
$users = User::findOrFail($id);
$users->delete();
return redirect('/admin/users')->with('status','User deleted');
}
}
The migration (2014_10_12_000000_create_users_table.php):
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->boolean('public')->default(0);
$table->string('phoneNumber')->nullable();
$table->timestamp('email_verified_at')->nullable();
$table->string('usertype')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
//Hier komt de aanvullende informatie die op de profielpagina wordt getoond
$table->string('workExperience')->nullable(); //de werkervaring van de betreffende gebruiker
$table->string('smallBiography')->nullable(); //beschrijving over hoe de betreffende gebruiker is begonnen met zijn werk.
$table->string('motivation')->nullable(); //beschrijving over wat de betreffende gebruiker motiveert, om zijn werk te doen.
$table->string('interests')->nullable(); //beschrijving waarom gebruiker het vak hem zo intresseert.
$table->string('hobbies')->nullable(); //hobbies van gebruiker
$table->string('function')->nullable(); //Functietitel van gebruiker
//Profile social links
$table->string('website')->nullable(); //website van gebruiker
$table->string('twitter')->nullable(); //website van gebruiker
$table->string('instagram')->nullable(); //website van gebruiker
$table->string('facebook')->nullable(); //website van gebruiker
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
The view for editing an user (edit.blade.php):
@extends('layouts.master')
@section('title')
Edit User:
@endsection()
@section('content')
<div class="container">
<div class="row">
<div class="col-md-12"><!-- 12 row -->
<div class="card">
<div class="card-header">
<h3>Edit User</h3>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
</div>
<div class="card-body">
<div class="row">
<div class="col-md-8"> <!--col-md-8 means 8 row and form put into one row and updtate the button below-->
<form action="/admin/user/edit/{{ $user->id }}" method="POST" ><!-- here we update the button-->
{{ csrf_field() }}
{{ method_field('PUT') }}
<div class="form-group">
<label>Name</label>
<input type="text" name="name" value="{{ $user->name }}" class="form-control">
</div>
<div class="form-group">
<label>E-mail</label>
<input type="text" name="email" value="{{ $user->email }}" class="form-control">
</div>
<div class="form-group">
<label>Public</label>
<input type="checkbox" name="public" value="{{ $user->public }}" class="form-control">
</div>
<div class="form-group">
<label>Phone number</label>
<input type="text" name="phoneNumber" value="{{ $user->phoneNumber }}" class="form-control">
</div>
<div class="form-group">
<label>Give Role</label>
<select name="usertype" class="form-control">
<option value="admin">Admin</option>
<option value="vendor">Vendor</option>
<option value="">None</option>
</select>
</div>
<div class="form-group">
<label>Password</label>
<input type="password" name="password" class="form-control">
</div>
<div class="form-group">
<label>Confirm password</label>
<input type="password" name="password_confirmation" class="form-control">
</div>
<button type="submit" class="btn btn-success">Submit</button>
<a href="/admin/users" class="btn btn-danger">Cancel</a>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection()
@section('scripts')
@endsection()
Routes (web.php):
//USERS
//list
Route::get('/admin/users','App\Http\Controllers\Admin\UserController@list')->name('users');
//create
Route::get('/admin/user/create','App\Http\Controllers\Admin\UserController@createUserView');
//create update
Route::post('/admin/user/create','App\Http\Controllers\Admin\UserController@createUserPost');
//update
Route::get('/admin/user/edit/{id}','App\Http\Controllers\Admin\UserController@updateUserView');
//update store
Route::put('/admin/user/edit/{id}','App\Http\Controllers\Admin\UserController@updateUserPut');
//delete
Route::delete('/admin/user/delete/{id}','App\Http\Controllers\Admin\UserController@deleteUser');
When I click the Submit button on the edit.blade.php file, It says that the 'public' index is undefined. I double checked the checkbox names and validation, but everything just looks fine.
Does anybody see why the checkbox data of 'public' is not received correctly by the controller?
Thank you for helping
Regards
Dave