Esse objetivo pode ser alcançado através de diferentes métodos,
1. Usando o BaseController
Do jeito que eu gosto de organizar as coisas, faço uma BaseController
aula que se estende ao próprio Laravel Controller
e montei várias coisas globais por lá. Todos os outros controladores se estendem BaseController
do Controlador do Laravel.
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
Se você sabe que deseja configurar algo para exibições em todas as solicitações em todo o aplicativo, também pode fazê-lo através de um filtro que é executado antes da solicitação - é assim que trato do objeto Usuário no Laravel.
App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});
OU
Você pode definir seu próprio filtro
Route::filter('user-filter', function() {
View::share('user', User::all());
});
e chame-o através de uma simples chamada de filtro.
Atualização de acordo com a versão 5. *
3. Usando Middleware
Usando o View::share
commiddleware
Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});
class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
4. Usando o View Composer
O View Composer também ajuda a vincular dados específicos para exibição de maneiras diferentes. Você pode vincular diretamente a variável a uma visualização específica ou a todas as visualizações. Por exemplo, você pode criar seu próprio diretório para armazenar seu arquivo do compositor de exibição de acordo com o requisito. e esses arquivos do compositor de visualizações através do Serviço fornecem interação com a visualização.
View compositor método pode usar de maneira diferente, primeiro exemplo pode ser parecido:
Você pode criar um App\Http\ViewComposers
diretório.
Provedor de serviço
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
Depois disso, adicione esse provedor ao config / app.php na seção "fornecedores".
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 pode ajudar apenas para a visualização específica. Mas se você deseja acionar o ViewComposer em todos os modos de exibição, precisamos aplicar essa única alteração ao ServiceProvider.
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
Referência
Documentação do Laravel
Para maiores esclarecimentos, o episódio Laracast
Se ainda houver algo claro do meu lado, me avise.