Este objetivo se puede lograr a través de diferentes métodos,
1. Usando BaseController
De la forma en que me gusta configurar las cosas, hago una BaseController
clase que amplía la de Laravel Controller
y establezco varias cosas globales allí. Todos los demás controladores se extienden desde BaseController
el controlador de Laravel en lugar de hacerlo.
class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();
// Sharing is caring
View::share('user', $user);
}
}
2. Usando filtro
Si sabe con certeza que desea configurar algo para las vistas en cada solicitud en toda la aplicación, también puede hacerlo a través de un filtro que se ejecuta antes de la solicitud; así es como trato con el objeto Usuario en Laravel.
App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});
O
Puedes definir tu propio filtro
Route::filter('user-filter', function() {
View::share('user', User::all());
});
y llamarlo a través de una simple llamada de filtro.
Actualización según la versión 5. *
3. Usando Middleware
Usando el View::share
conmiddleware
Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});
class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
4. Usando View Composer
View Composer también ayuda a enlazar datos específicos para ver de diferentes maneras. Puede vincular directamente la variable a una vista específica o a todas las vistas. Por ejemplo, puede crear su propio directorio para almacenar su archivo de composición de vista de acuerdo con los requisitos. y estos archivos de composición de vista a través del Servicio proporcionan interactuar con la vista.
El método Ver compositor puede usarse de manera diferente. El primer ejemplo puede parecerse:
Podrías crear un App\Http\ViewComposers
directorio.
Proveedor de servicio
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
Después de eso, agregue este proveedor a config / app.php en la sección "proveedores".
TestViewComposer
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class TestViewComposer {
public function compose(View $view) {
$view->with('ViewComposerTestVariable', "Calling with View Composer Provider");
}
}
ViewName.blade.php
Here you are... {{$ViewComposerTestVariable}}
Este método podría ayudar solo para una vista específica. Pero si desea activar ViewComposer para todas las vistas, tenemos que aplicar este cambio único a ServiceProvider.
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
Referencia
Documentación Laravel
Para mayor aclaración Episodio de Laracast
Si todavía hay algo poco claro de mi parte, avíseme.