php 试图获取非对象的属性'slug'

at0kjp5o  于 2022-12-10  发布在  PHP
关注(0)|答案(1)|浏览(159)

我是Laravel 9的初学者。当我点击编辑表单时,我会收到错误,点击编辑表单后,我无法提交编辑,而是点击侧边栏中的 Jmeter 板菜单,在给出错误Trying to get property 'slug' of non-object后,我查看URL,URL更改为http://127.0.0.1:8000/laporan-edit/dashboard,应该有链接http://127.0.0.1:8000/dashboard
我的控制器

  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Laporan;
  4. use Illuminate\Http\Request;
  5. class LaporanController extends Controller
  6. {
  7. public function index()
  8. {
  9. $laporan = Laporan::all();
  10. return view('laporan', ['laporan' => $laporan]);
  11. }
  12. public function add()
  13. {
  14. return view('laporan-add');
  15. }
  16. public function store(Request $request)
  17. {
  18. $validated = $request->validate([
  19. 'nama_korban' => 'required|max:255'
  20. ]);
  21. if ($request->file('foto')) {
  22. $extension = $request->file('foto')->getClientOriginalExtension();
  23. $NamaBaru = $request->nik_korban . '-' . now()->timestamp . '.' . $extension;
  24. $request->file('foto')->storeAs('fotokorban', $NamaBaru);
  25. }
  26. $request['foto_korban'] = $NamaBaru;
  27. Laporan::create($request->all());
  28. return redirect('laporan')->with('status', 'Data Telah Ditambahkan !');
  29. }
  30. public function edit($slug)
  31. {
  32. $laporan = Laporan::where('slug', $slug)->first();
  33. return view('laporan-edit', ['laporan' => $laporan]);
  34. }
  35. public function update(Request $request, $slug)
  36. {
  37. $laporan = Laporan::where('slug', $slug)->first();
  38. $laporan->update($request->all());
  39. return redirect('laporan')->with('status', 'Data Telah Di Edit');
  40. }
  41. }

我的模型文件

  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Cviebrock\EloquentSluggable\Sluggable;
  5. use Illuminate\Database\Eloquent\Factories\HasFactory;
  6. class Laporan extends Model
  7. {
  8. use HasFactory;
  9. use Sluggable;
  10. protected $fillable = [
  11. 'petugas_pendamping', 'kronologi_kejadian', 'id_pengguna', 'nama_pelaku', 'jenis_kasus', 'foto_korban', 'tempat_kejadian', 'alamat_kejadian', 'wilayah_pendamping', 'korban', 'slug', 'nama_pelapor', 'nik_pelapor', 'alamat_pelapor', 'hubungan_pelapor', 'nik_korban', 'nama_korban', 'jk_korban', 'umur_korban', 'alamat_korban', 'nik_pelaku', 'jk_pelaku', 'umur_pelaku', 'alamat_pelaku', 'tanggal_pengaduan', 'tanggal_kejadian', 'jam_pengaduan', 'status_laporan'
  12. ];
  13. public function sluggable(): array
  14. {
  15. return [
  16. 'slug' => [
  17. 'source' => 'nama_pelapor'
  18. ]
  19. ];
  20. }
  21. }

我的路线

  1. <?php
  2. use Illuminate\Auth\Events\Login;
  3. use Illuminate\Support\Facades\Route;
  4. use App\Http\Controllers\AuthController;
  5. use App\Http\Controllers\UserController;
  6. use App\Http\Controllers\RekapController;
  7. use App\Http\Controllers\LaporanController;
  8. use App\Http\Controllers\PetugasController;
  9. use App\Http\Controllers\ProfileController;
  10. use App\Http\Controllers\DashboardController;
  11. /*
  12. |--------------------------------------------------------------------------
  13. | Web Routes
  14. |--------------------------------------------------------------------------
  15. |
  16. | Here is where you can register web routes for your application. These
  17. | routes are loaded by the RouteServiceProvider within a group which
  18. | contains the "web" middleware group. Now create something great!
  19. |
  20. */
  21. Route::get('/', function () {
  22. return view('welcome');
  23. })->middleware('auth');
  24. Route::middleware('only_guest')->group(function () {
  25. Route::get('login', [AuthController::class, 'login'])->name('login');
  26. Route::post('login', [AuthController::class, 'authenticating']);
  27. });
  28. Route::middleware('auth')->group(function () {
  29. Route::get('logout', [AuthController::class, 'logout']);
  30. Route::get('dashboard', [DashboardController::class, 'index'])->middleware('only_admin');
  31. Route::get('petugas', [PetugasController::class, 'petugas'])->middleware('only_petugas');
  32. Route::get('rekaplaporan', [RekapController::class, 'index']);
  33. Route::get('laporan', [LaporanController::class, 'index']);
  34. Route::get('laporan-add', [LaporanController::class, 'add']);
  35. Route::post('laporan-add', [LaporanController::class, 'store']);
  36. Route::get('laporan-edit/{slug}', [LaporanController::class, 'edit']);
  37. Route::put('laporan-edit/{slug}', [LaporanController::class, 'update']);
  38. Route::get('user', [UserController::class, 'index']);
  39. Route::get('profile', [ProfileController::class, 'index']);
  40. });

查看edit. blade.php

  1. <div class="card-body">
  2. <form action="/laporan-edit/{{ $laporan->slug }}" method="post" enctype="multipart/form-data" class="form-horizontal">
  3. @csrf
  4. @method('put')

我已经尝试过这种情况

  1. public function edit($slug)
  2. {
  3. if($laporan = Laporan::where('slug', $slug)->first()){
  4. return view('laporan-edit', ['laporan' => $laporan]);
  5. } else{
  6. return redirect('dashboard');
  7. }
  8. // $laporan = Laporan::where('slug', $slug)->first();
  9. // return view('laporan-edit', ['laporan' => $laporan]);
  10. }

它的工作,但是,当我点击侧边栏另一个名字,然后它总是重定向http://127.0.0.1:8000/dashboard

kxeu7u2r

kxeu7u2r1#

在刀片服务器侧菜单中,使用绝对链接href="/dashboard"代替相对链接href="dashboard"

  1. <ul class="navbar-nav iq-main-menu" id="sidebar-menu">
  2. <li class="nav-item static-item">
  3. <a class="nav-link static-item disabled text-start" href="#" tabindex="-1">
  4. <span class="default-icon">Home</span>
  5. <span class="mini-icon" data-bs-toggle="tooltip" title="Home" data-bs-placement="right">-</span>
  6. </a>
  7. </li>
  8. <li class="nav-item">
  9. <a @if(request()->route()->uri == 'dashboard') class="nav-link active"
  10. @else class="nav-link" @endif
  11. aria-current="page" href="/dashboard">

或者使用命名路由,方法是为路由指定别名/名称,并使用它来生成链路

  1. Route::get('dashboard', [DashboardController::class, 'index'])->middleware('only_admin')->name('dashboard');

在叶片中

  1. <a @if(request()->route()->uri == 'dashboard') class="nav-link active"
  2. @else class="nav-link" @endif
  3. aria-current="page" href="{{route('dashboard')}}">

您还应该使用$laporan = Laporan::where('slug', $slug)->firstOrFail();而不是->first(),以避免不必要的错误,并在链接不正确时显示404。

展开查看全部

相关问题