0
0

More than 1 year has passed since last update.

【失敗例に関する記事】Controllerで使用しているインスタンスを、他のControllerへそのまま渡すのは難しい

Last updated at Posted at 2022-07-06

他のControllerで使用されているインスタンスを、別のControllerへ受け渡して使うことができないか試みた。
具体的には、名前空間に別のControllerを記載し、メソッドの引数として指定しようとした。

↓以下のようなコードを書いてみた。 ※失敗例なので参考にしても動きません

ManualController
//呼び出される側のController
public function store(Request $request)
{
    $inputs=$request->validate([
        'title'=>'required|max:30',
    ]);

    $manual=new Manual();
    $manual->title=$request->title;
    $manual->user_id=auth()->user()->id;
    $manual->save();

    return redirect()->route('step.create');
}

public function getManual()
{
    return $this->manual;
}
StepController
//呼び出す側のController
public function store(Request $request)
{
    $inputs=$request->validate([
        'body'=>'required|max:500',
        'image'=>'image|max:1024'
    ]);

    global $number;
    $step=new Step();
    $step->id=$number;
    $step->body=$request->body;

    $called = app()->make('App\Http\Controllers\ManualController');
    $manual = $called->getManual();
    $step->manual_id=$manual->id;

    if (request('image')){
        $original = request()->file('image')->getClientOriginalName();
        $name = date('Ymd_His').'_'.$original;
        request()->file('image')->move('storage/images', $name);
        $step->image = $name;
    }

    $step->save();
    $number++;

    return view('step.create', [
        'step_num' => $number,
    ])->with('message', 'このステップを保存しました');
}

結果的にうまくいかず。
代替案として、URLにモデルのIDを載せることで、URLから情報を取得する方法を採用した。
そちらに関しては、また別途記事を作成します。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0