plantillas - variables en blade laravel
¿Cómo paso una variable al diseño usando Laravel ''Blade? (9)
En la Plantilla de hoja: defina una variable como esta
@extends(''app'',[''title'' => ''Your Title Goes Here''])
@section(''content'')
Y en la aplicación.blade.php o cualquier otra opción (solo estoy siguiendo la configuración predeterminada de Laravel 5)
<title>{{ $title or ''Default title Information if not set explicitly'' }}</title>
Esta es mi primera respuesta aquí. Espero que funcione. ¡Buena suerte!
En Laravel 4, mi controlador usa un diseño Blade:
class PagesController extends BaseController {
protected $layout = ''layouts.master'';
}
El diseño maestro tiene salidas del título variable y luego muestra una vista:
...
<title>{{ $title }}</title>
...
@yield(''content'')
....
Sin embargo, en mi controlador solo parezco poder pasar variables a la subvista, no a la disposición. Por ejemplo, una acción podría ser:
public function index()
{
$this->layout->content = View::make(''pages/index'', array(''title'' => ''Home page''));
}
Esto solo pasará la variable $title
a la sección de contenido de la vista. ¿Cómo puedo proporcionar esa variable a toda la vista, o al menos el diseño maestro?
La forma más simple de resolver:
view()->share(''title'', ''My Title Here'');
O usando view Facade:
use View;
...
View::share(''title'', ''My Title Here'');
Para futuros Google''rs que usen Laravel 5, ahora también pueden usarlo con includes,
@include(''views.otherView'', [''variable'' => 1])
Parece que puedo pasar variables a todo el diseño utilizando atributos en el objeto de diseño; por ejemplo, para resolver mi problema, pude hacer lo siguiente:
$this->layout->title = ''Home page'';
Pude resolver ese problema agregando esto a mi método de controlador:
$title = ''My Title Here'';
View::share(''title'', $title);
$ this-> layout-> title = ''Página de inicio''; tampoco funcionó.
Puedes probar:
public function index()
{
return View::make(''pages/index'', array(''title'' => ''Home page''));
}
Si usa @extends
en su diseño de contenido, puede usar esto:
@extends(''master'', [''title'' => $title])
$data[''title''] = $this->layout->title = ''The Home Page'';
$this->layout->content = View::make(''home'', $data);
He hecho esto hasta ahora porque lo necesitaba tanto en la vista como en el archivo maestro. Parece que si no usa $ this-> layout-> title no estará disponible en el diseño maestro. Mejoras bienvenidas!
class PagesController extends BaseController {
protected $layout = ''layouts.master'';
}
public function index()
{
$this->layout->title = "Home page";
$this->layout->content = View::make(''pages/index'');
}
En el archivo Blade Template, RECUERDE usar @ al frente de la variable.
...
<title>{{ $title or '''' }}</title>
...
@yield(''content'')
...