Route::Resource 工作正常,但使用相同控制器的其他路由 get Method Controller::show 不存在。拉拉维尔 10

Route::Resource Was Working Fine, but additional route using same controller got Method Controller::show does not exist. Laravel 10

提问人:Kholid Syaifullah 提问时间:5/17/2023 更新时间:5/17/2023 访问量:98

问:

因此,我使用相同的控制器创建了 2 个单独的索引,其中检索每个数据,并仅检索其他特定数据标准。注册和登录路由工作正常,每个资源路由也工作正常,唯一的问题是使用已经建立的路由资源控制器的新路由时。我得到的是 BadMethodCallException 方法 App\Http\Controllers\PinjamController::show 不存在。

链接到相应的索引

<!-- /.Index Working Fine -->
<a class="btn btn-success" href="{{ route('pinjam.index') }}"> Index Pinjam</a>
<!-- /.This one got error 404 because resource didn't contain 'all' syntax and only focused on CRUD?-->
<a class="btn btn-primary" href="{{ route('pinjam.all')}}"> Record Peminjaman</a>
<!-- /.This is the one that got badMethodCall error-->
<a class="btn btn-primary" href="{{ url('/admin/pinjam/all')}}"> Record Peminjaman</a>

网络.php

use App\Http\Controllers\PinjamController;
Route::resource('/admin/pinjam',PinjamController::class)->middleware('auth:admin');
Route::get('/admin/pinjam/all',[PinjamController::class,'all'])->middleware('auth:admin');
Route::get('/admin/pinjam/kembali',[PinjamController::class,'kembali'])->middleware('auth:admin');
Route::post('/admin/pinjam/track',[PinjamController::class,'track'])->middleware('auth:admin');

Pinjam控制器:.php

use Illuminate\Http\Request;
use App\Providers\RouteServiceProvider;
use App\Models\bukus_users;
protected function all()
    {
        $rows = bukus_users::query()->with(['buku', 'user'])->paginate(5)->toArray(); // the error part and also where I seperated them was on blade file
        return view('admin.pinjam.all', ['rows' => $rows]);
    }
    protected function kembali()
    {
        return view('admin.kategori.kembali');
    }
    protected function track(Request $request)
    {
        $pinjam = bukus_user::where('barcode','like','%' . request('barcode') . '%')->first();
        $pinjam->status_pengembalian = false;
        $pinjam->save();
        return redirect()->route('pinjam.index')->with('success','Buku Telah dikembalikan');
    }
    protected function index()
    {
        $rows = bukus_users::query()->with(['buku', 'user'])->paginate(5)->toArray(); // index just working fine
        return view('admin.pinjam.index', ['rows' => $rows]);
    }

错误链接到ss的屏幕截图,那么这里有什么问题?由于资源路由工作正常,因此我手动创建的注册和登录以使管理员守卫也能正常工作,那么为什么除了访问同一控制器时出错的资源路由之外,还有其他路由呢?

PHP Laravel 路由 方法 控制器

评论

1赞 IGP 5/17/2023
尝试制作控制器方法。public
3赞 lagbox 5/17/2023
这些“补充”路由需要在资源定义之前定义(否则“show”路由会捕获它们)......错误是正确的,你没有方法,资源路由生成方法的路由showshow
0赞 cile1993 5/17/2023
@IGP是的,这很可能是问题所在,请对所有方法执行此操作。此外,最好为路线命名。
0赞 Kholid Syaifullah 5/17/2023
我试着把它放在资源之前......现在它适用于“所有”,但现在我对“kembali”有问题

答:

0赞 Leena Patel 5/17/2023 #1

尝试重新排序路线。将所有新路由放在 Resourse 之前。

Route::get('/admin/pinjam/all',[PinjamController::class,'all'])->middleware('auth:admin');
Route::get('/admin/pinjam/kembali',[PinjamController::class,'kembali'])->middleware('auth:admin');
Route::post('/admin/pinjam/track',[PinjamController::class,'track'])->middleware('auth:admin');
Route::resource('/admin/pinjam',PinjamController::class)->middleware('auth:admin');

或者,您可以尝试像这样手动添加资源路由

Route::get('/admin/pinjam/{pinjam}', [PinjamController::class, 'show'])->middleware('auth:admin');
Route::get('/admin/pinjam', [PinjamController::class, 'index'])->middleware('auth:admin');
Route::get('/admin/pinjam/create', [PinjamController::class, 'create'])->middleware('auth:admin');
Route::post('/admin/pinjam', [PinjamController::class, 'store'])->middleware('auth:admin');
Route::get('/admin/pinjam/{pinjam}/edit', [PinjamController::class, 'edit'])->middleware('auth:admin');
Route::put('/admin/pinjam/{pinjam}', [PinjamController::class, 'update'])->middleware('auth:admin');
Route::delete('/admin/pinjam/{pinjam}', [PinjamController::class, 'destroy'])->middleware('auth:admin');