0

I'm learning Laravel I am creating a form to edit the names of permissions within the Database. I created the page permission-edit.blade.php I added it to the web.php is linked with the page permissions.blade.php. The display works without any problems. I added the script to change the name of the permission, but when I press the save button the name is not changed.I also set the controls within the controller, but the changes are not saved. where am I going wrong?

permission-edit.blade.php

@extends('layouts.app', ['class' => 'g-sidenav-show bg-gray-100'])

@section('content')
    @include('layouts.navbars.auth.topnav', ['title' => 'Permission'])
    <div class="container-fluid py-4">
        <div class="row">
            <div class="col-12">
            
                  
           

<div class="card mt-4">
<div class="card-header pb-0 p-3">
<div class="row">
<div class="col-6 d-flex align-items-center">
    <form method="POST" action="{{ route('permission.update', $permission) }}">
        @csrf
        @method('POST')
<h6 class="mb-0">Permission</h6>
</div>
<div class="col-6 text-end">

</div>
</div>
</div>

<div class="card-body p-3">
<div class="row">
<div class="col-md-6 mb-md-0 mb-4">
<input type="text" id="name" name="name" class="card border  border-radius-lg d-flex align-items-center flex-row" value="{{ $permission->name }}" />

</div>
</div>
<input type="submit" value="Save" class="btn bg-gradient-dark mt-5">
</form>
</div>
</div>
</div>
                      
                       
                                   
                               </ul>
                      
                        </div>
        @include('layouts.footers.auth.footer')
    </div>
@endsection


Permission Controller

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Permission;

class PermissionController extends Controller
{
               public function permissions()
    {
         $permissions = Permission::all(); 
        return view("pages.permission", compact('permissions'));
    }


            public function create()
            {
                     return view('pages.permission-create');

            }

            public function store(Request $request)
            {
                     $validated = $request->validate(['name' => 'required']);
                     Permission::create($validated);

                     return to_route('permissions');
            }

            public function edit(Permission $permission)
            {
               return view('pages.permission-edit', compact('permission'));

            }

            public function update(Request $request, Permission $permission)
            {
                $validated = $request->validate(['name' => 'required']);
                $permission->update($validated);
               
               return to_route('permissions')->with('message', 'Permission updated.');;

            }

}

web.php

<?php

use App\Http\Controllers\ProfileController;
use App\Http\Controllers\IndexController;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/

require __DIR__.'/auth.php';

use App\Http\Controllers\HomeController;
use App\Http\Controllers\PageController;
use App\Http\Controllers\RegisterController;
use App\Http\Controllers\LoginController;
use App\Http\Controllers\UserProfileController;
use App\Http\Controllers\ResetPassword;
use App\Http\Controllers\ChangePassword;
use App\Http\Controllers\UserController;
use App\Http\Controllers\PermissionController;
use App\Http\Controllers\RoleController;           
            

Route::get('/', function () {return redirect('/welcome');})->middleware('guest')->name('register');;
    Route::get('/register', [RegisterController::class, 'create'])->middleware('guest')->name('register');
    Route::post('/register', [RegisterController::class, 'store'])->middleware('guest')->name('register.perform');
    Route::get('/login', [LoginController::class, 'show'])->middleware('guest')->name('login');
    Route::post('/login', [LoginController::class, 'login'])->middleware('guest')->name('login.perform');
    Route::get('/reset-password', [ResetPassword::class, 'show'])->middleware('guest')->name('reset-password');
    Route::post('/reset-password', [ResetPassword::class, 'send'])->middleware('guest')->name('reset.perform');
    Route::get('/change-password', [ChangePassword::class, 'show'])->middleware('guest')->name('change-password');
    Route::post('/change-password', [ChangePassword::class, 'update'])->middleware('guest')->name('change.perform');
    Route::get('/welcome', [HomeController::class, 'index'])->name('home');

    Route::group(['middleware' => ['role:admin']], function () {
    Route::get('/roles', [RoleController::class, 'roles'])->name('roles');
    Route::get('/role-create', [RoleController::class, 'create'])->name('role-create');
    Route::post('/roles', [App\Http\Controllers\RoleController::class, 'store'])->name('role.store');
    Route::get('/role-edit', [App\Http\Controllers\RoleController::class, 'edit'])->name('role-edit');
    Route::get('/permissions', [PermissionController::class, 'permissions'])->name('permissions');
    Route::get('/permission-edit', [App\Http\Controllers\PermissionController::class, 'edit'])->name('permission-edit');
    Route::get('/permission-create', [PermissionController::class, 'create'])->name('permission-create');
    Route::post('/permissions', [App\Http\Controllers\PermissionController::class, 'store'])->name('permission.store');
    Route::post('/permissions-edit', [PermissionController::class, 'update'])->name('permission.update');
    Route::get('/dashboard', [PageController::class, 'dashboard'])->name('dashboard');
    Route::get('/user-management', [UserController::class, 'userman'])->name('user-management');
        
    });


    Route::group(['middleware' => 'auth'], function () {
    Route::get('/index', [PageController::class, 'vr'])->name('index');
    Route::get('/mydashboard', [PageController::class, 'mydb'])->name('mydashboard');
    Route::get('/tables', [PageController::class, 'tables'])->name('tables');
    Route::get('/rtl', [PageController::class, 'rtl'])->name('rtl');
    Route::get('/profile', [UserProfileController::class, 'show'])->name('profile');
    Route::post('/profile', [UserProfileController::class, 'update'])->name('profile.update');
    Route::get('/profile-static', [PageController::class, 'profile'])->name('profile-static'); 
    Route::get('/sign-in-static', [PageController::class, 'signin'])->name('sign-in-static');
    Route::get('/sign-up-static', [PageController::class, 'signup'])->name('sign-up-static'); 
    Route::get('/{page}', [PageController::class, 'mydashboard'])->name('page');
    Route::post('logout', [LoginController::class, 'logout'])->name('logout');



});

I hope to find a solution. I have been checking the code for 2 days and cannot find the error, it seems that the page is not communicating with the Database.

Thanks for the solution!

apokryfos
  • 38,771
  • 9
  • 70
  • 114
M1k
  • 5
  • 5
  • Unrelated: take better care of your HTML, you're closing non-existing divs before closing your form – brombeer Mar 16 '23 at 10:38
  • You'd use PUT/PATCH methods when updating – brombeer Mar 16 '23 at 10:40
  • Thanks, I have corrected the code by removing unnecessary divs. When i use Put or Patch into the form, i get these Message: The PATCH method is not supported for route permissions-edit. Supported methods: GET, HEAD, POST. – M1k Mar 16 '23 at 10:45
  • You could always check the [Available Router Methods](https://laravel.com/docs/8.x/routing#available-router-methods) from the documentation. – brombeer Mar 16 '23 at 11:12
  • I added the patch and the put in the web.php. now the page loads, but the problem remains, the page does not communicate with the database. i think the problem originates in the PermissionController. `Route::patch('/update', [App\Http\Controllers\PermissionController::class,'update'])->name('permission.update'); ` **PermissionController.php** `public function update(Request $request, Permission $permission) {$validated = $request->validate(['name' => 'required']); $permission->update($validated); return to_route('permissions')->with('message', 'Permission updated.'); }` – M1k Mar 16 '23 at 14:18

0 Answers0