モデルの注入の際に削除済みのものは取得できず、注入に失敗し404となります。これは正しい挙動なので、ここに手を加えるのではなく、削除済みのものを特例として注入できる処理を書くと良いです。
php
1public function show(Staff $staff) {
2 return $this->makeShowView($staff);
3}
4
5public function showDeleted(int $staff_id) {
6 // 削除済みのものを取得
7 $staff = Staff::onlyTrashed()->findOrFail($staff_id);
8 return self::show($staff);
9}
削除済み専用のルーティングを作る形になります。
こうしておけば削除済みのページを見れるユーザーをミドルウェアで制限したりするのも簡単です。
基本的にソフトデリートは 削除
です。削除されてないデータとは明確に処理を分けたほうが良いように思いますし、頻繁にこのようなコードを書く必要が有る場合はソフトデリートではなく、staffにステータスを持たせて管理方法を変えたほうがいいかもしれません。
追記
どうしても注入したいのであれば、 ImplicitRouteBinding.php
の resolveForRoute
メソッドを改造します。
php
1public static function resolveForRoute($container, $route)
2 {
3 // ...略
4
5 // ホワイトリスト (実際ではハードコーディングは避けたほうが吉)
6 if ($route->action['controller'] == 'App\Http\Controllers\StaffController@show') {
7 $route->setParameter($parameterName, $model->where(
8 $model->getRouteKeyName(), $parameterValue
9 )->withTrashed()->firstOrFail());
10 } else {
11 $route->setParameter($parameterName, $model->where(
12 $model->getRouteKeyName(), $parameterValue
13 )->firstOrFail());
14 }
15 }
16 }
vender以下のコードなのでおそらくgit管理外ですが、こうすれば特定の注入にソフトデリートされたデータを含めることができます。 参考: Rewrite Vendor Class
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/14 06:57
2017/06/14 07:32
2017/06/15 01:56
2017/06/15 02:37
2017/06/15 07:29