重现我面临的问题的步骤
1-创建项目:
php artisan make:model Item --all
2-在web.php
中创建资源:
Route::resource('items', ItemController::class);
3-然后,在ItemController
的构造函数中,链接ItemPolicy
:
public function __construct()
{
$this->authorizeResource(Item::class);
}
4-在ItemPolicy
的所有方法中返回true(这样您就获得了授权)
public function view(User $user, Item $item)
{
return true;
}
5-在Item
模型中添加SoftDeletes
特征:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Item extends Model
{
use HasFactory, SoftDeletes;
}
6-在项目迁移中添加SoftDeletes
。运行它。
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->softDeletes();
});
}
7-在ItemController
中的show
方法中写入一个dd,以检查您是否确实在方法中输入了:
public function show(Item $item)
{
dd('You are inside the show function');
}
8-在数据库中创建一个项目,然后转到GET /items/1
。您应该看到dd消息。
Route::get('/testCreate', function () {
$item = Item::create();
return redirect("/items/$item->id");
});
9-现在,在GET /items/1
中,消息不再出现(相反,我得到404)。
Route::get('/testDelete', function () {
$item = Item::firstOrFail();
$item->delete();
return redirect("/items/$item->id");
});
问题
如何在模型被软删除的情况下在GET /items/1
中输入show方法?
备注
- 确保您已登录
- 我已 checkout this question,但无法使用
- 我还尝试将控制器中的show方法更改为这种方式(
$id
而不是Item $item
),但无论如何我得到404。我没有进入该方法,策略在中间,不允许我进入:
public function show($id)
{
dd($id);
// dd($item);
}
1条答案
按热度按时间xlpyo6sf1#
这就像在
routes/web.php
文件中定义的路径资源路径的末尾添加withTrashed()
函数一样简单。之前:
之后:
相关文档请单击此处和此处。
更新
在一个旧的项目,我有,尽管做上面解释,我得到这个错误:
我通过更新项目的 composer pagackes来解决这个问题:
现在工作正常。