Route Model Binding
Comprar curso

110. Route Model Binding


2 comentarios

Inicia sesión para comentar

Comentarios:

  • Luis Felipe Vasquez Yepez

    Luis Felipe Vasquez Yepez hace 7 meses

    Tengo “problemas” al generar los datos en los factorys y es que no me funciona con el metodo fake()→sentence(). si no que en su caso tengo que colocar faker→sentence

  • Gerardo Vera Velasco

    Gerardo Vera Velasco hace 1 año

    Este tema no lo sentí muy bien explicado, faltó mencionar que tienes que poner en el controlador el nombre de el modelo para poder realizar la inyección de modelos

    • Eduardo Martínez hace 1 año

      Buenas!

      Tienes razón, en las anteriores unidades no hemos realizado los cambios necesarios para que nos funcione el route binding. No obstante no es demasiado complicado, y si a alguien le sirve, estos son los pasos que hice para refactorizar el código de acuerdo con lo que vemos en el vídeo:
       

      1. En las vistas

      Si observamos nuestra vista posts.index, en el enlace que nos enrutaba a la vista show pasábamos $post->id como parámetro.  Ahora, en lugar del id, pasarémos la instancia completa , dejando $post a secas.

      Este cambio será igual en las demás vistas, por lo que debes revisar las diferentes vistas y allá donde enrutábamos pasando el id de la instancia, ahora pasamos la instancia en sí.

       

      2. En los controladores

      Este cambio se aprecia también en el vídeo pero quizás pasa desapercibido.

      Vamos a centrarnos en el método show() para la explicación:

      Antes, nosotros recibíamos un parámetro de tipo string llamado $post. En él se almacenaba el id del post, por lo que a continuación sustituíamos el valor de la variable, al localizar el post correspondiente a dicho id, por medio del método find():

      public function show(string $post)
      {
          $post = Post::find($post);
          return view('posts.show', compact('post'));
      }

      Ahora lo  cambiamos para pasar la instancia del post en sí; ya no será no necesario buscarlo. Cambiamos el tipo del parámetro (de string a Post), y eliminamos el método find():

      public function show(Post $post)
      {
          return view('posts.show', compact('post'));
      }

      Revisa los demás métodos del controlador donde se pasaba el parámetro “$post” y realiza el mismo cambio.

    • Jaime Salazar hace 1 año

      Muchísimas gracias,