COMO PASAR VARIABLES DEL CONTROLADOR A LA PLANTILLA EN LARAVEL

En este post explico como pasar variables del controlador a la plantilla en Laravel.
  • Forma básica: pasar un array directamente:

    return view('perfil', [
        'nombre' => 'Juan',
        'edad'   => 30,
        'posts'  => $posts,
    ]);
    
    En la plantilla, o vista, se usarán las variables: "$nombre", "$edad" y "posts".
  • Usando compact: "compact()" es una función nativa de PHP, pero se usa bastantr porque es corta y limpia. Cómo funciona: Se le pasan los nombres de las variables que de controlador que se quieren usar en la vista, y Laravel crea automáticamente el array con esos nombres como keys.

    public function show()
    {
        $nombre = 'Juan';
        $edad   = 30;
        $posts  = Post::all();
        return view('perfil', compact('nombre', 'edad', 'posts'));
    }
    
    En la vista: "$nombre", "$edad" y "posts". (exactamente los mismos nombres). Ventajas:
    • Código muy corto.
    • Ideal cuando las variables ya tienen el nombre que quiere usar en la vista.
    • Súper legible cuando hay muchas variables.
  • Usando with() (estilo Laravel puro): Este es el método oficial que muestra la documentación. Devuelve la instancia de la vista, por eso se puede encadenar.

    return view('perfil')
        ->with('nombre', 'Juan')
        ->with('edad', 30)
        ->with('posts', $posts);
    
    • Se puede cambiar el nombre de la variable fácilmente (->with('usuario', $user)).
    • Muy claro cuando se lee el código (se ve qué key va con qué valor).
    • Se pueden encadenar tantos with() como se quiera.
  • Truco extra: método mágico: Laravel permite esto (funciona porque usa "__call)":

    return view('perfil')
        ->withNombre('Juan')
        ->withEdad(30)
        ->withPosts($posts);
    
    Se convierte automáticamente en with('nombre', ...)) Poca gente lo usa.