LoginSignup
0
0

apiリソースを使用したときのルートパラメータの問題。

Posted at

Laravelにてshowができずにハマってしまいました。

ModelIdCompleteController.php
public function show(ModelIdComplete $modelid)
  {
    return new ModelIdCompleteResource($modelid);
  }
//ModelIdComplete ...モデル

本来showメソッドの引数は($modelidcomplete)でしたが、
無駄に長くする必要はないと思い、上記のようにshowメソッドの引数を($modelid)と省略したら、showで渡すべきデータベースの値がNullになってしまいました。

調べたところ、apiリソースを使用していると、ルートパラメータの引数設定をLaravelが自動で行ってくれるようで、Controllerでもルーティングで指定したものと同じマイグレーション名に関連する名前でないと認識してくれないようでした。これは「暗黙の結合」と呼ばれており、名前一致によって自動でモデルとデータのやり取りをしてくれているのだそうです。

そこで以下のように省略せず書いたら問題なく動きました。

ModelIdCompleteController.php
  public function show(ModelIdComplete $modelidcomplete)
  {
    return new ModelIdCompleteResource($modelidcomplete);
  }

今回は、未熟さ故に他のコードを参考にしていたら、「同じ構成のはずなのに動かない!?」とハマった出来事でした。

0
0
0

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