首页 > 解决方案 > 如何在软删除模型上使用资源控制器的 show 方法?

问题描述

所以我有一个名为的资源控制器ProjectController,我添加了软删除并将其用作存档。

Route::get('project/archive', 'ProjectController@trash')->name('project.archive');
Route::resource('project', 'ProjectController');

在这个档案中,我有一个项目列表。

public function trash()
{
    $projects = Project::onlyTrashed()->get();
    return view('projects.archive', compact('projects'));
}

现在我想用show方法来查看这些项目。

在我的\App\Providers\RouteServiceProvider我补充说:

Route::bind('project', function ($value) {
    return \App\Project::withTrashed()->find($value);
});

但是这样,我可以编辑项目。

我试图绑定project/show, project/{project}/show,但这不起作用。

如何show在废弃项目上使用我的资源控制器的方法?

我完整的 ProjectController 看起来像:

<?php

namespace App\Http\Controllers;

use App\Http\Requests\ProjectRequest;
use App\Project;

class ProjectController extends Controller
{
	public function index()
	{
		$projects = Project::all();
		return view('project.index', compact('projects'));
	}

	public function create()
	{
		return view('project.create');
	}

	public function store(ProjectRequest $request)
	{
		Project::create($request->all());
		return redirect()->route('project.index');
	}

	public function show(Project $project)
	{
		return view('project.show', compact('project'));
	}

	public function edit(Project $project)
	{
		return view('project.edit', compact('project'));
	}

	public function update(ProjectRequest $request, Project $project)
	{
		$project->update($request->all());
		return redirect()->route('project.index');
	}

	public function destroy(Project $project)
	{
		$project->delete();
		return redirect()->route('project.archive');
	}

	public function trash()
	{
		$projects = Project::onlyTrashed()->get();
		return view('project.archive', compact('projects'));
	}
}

标签: phplaravelrouting

解决方案


通过在\App\Providers\RouteServiceProvider.

Route::bind('project', function ($value) {
    if (Route::currentRouteName() === 'project.show') {
        return \App\Project::withTrashed()->find($value);
    }
    return \App\Project::find($value);
});

希望这对其他人有帮助。


推荐阅读