Quero ter alguns dados padrão acessíveis em todas as visualizações no meu aplicativo Laravel 5.
Tentei procurá-lo, mas só encontrei resultados para o Laravel 4. Li a documentação 'Compartilhando dados com todas as visualizações' aqui, mas não consigo entender o que fazer. Onde o código a seguir deve ser colocado?
View::share('data', [1, 2, 3]);
Obrigado pela ajuda.
*
compositores no modo de exibição, especialmente se estiver usando consultas db, pois ele é executado para todas as sub-visualizações, componentes etc., para que você possa executar centenas de consultas desnecessárias, o melhor é usar a exibição base, por exemplo, layouts. O aplicativo passa os dados conforme necessário.Respostas:
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 LaravelController
e montei várias coisas globais por lá. Todos os outros controladores se estendemBaseController
do Controlador do Laravel.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.
OU
Você pode definir seu próprio filtro
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
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
Depois disso, adicione esse provedor ao config / app.php na seção "fornecedores".
TestViewComposer
ViewName.blade.php
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.
Referência
Documentação do Laravel
Para maiores esclarecimentos, o episódio Laracast
Se ainda houver algo claro do meu lado, me avise.
fonte
register()
método - não é opcional*
. Se você não estiver usando o,*
então você deve estar bem.Você pode criar seu próprio provedor de serviços (o
ViewServiceProvider
nome é comum) ou pode usar o existenteAppServiceProvider
.No provedor selecionado, coloque seu código no método de inicialização.
Isso tornará uma
$data
variável acessível em todas as suas visualizações.Se você preferir usar a fachada em vez do auxiliar, mude
view()->
para,View::
mas não esqueça de teruse View;
na parte superior do arquivo.fonte
AppServiceProvider
há problema, mas se tiver algo mais do que isso, considere criar um novo provedor.composer update
também não está funcionando. Na verdade, não está disparandoboot()
nada. Eu preciso compartilhar duas variáveis.Eu achei que era o mais fácil. Crie um novo provedor e use o
'*'
curinga para anexá-lo a todas as visualizações. Também funciona em 5.3 :-)fonte
A melhor maneira seria compartilhar a variável usando
View::share('var', $value);
Problemas com a composição usando
"*"
:Considere a seguinte abordagem:
De uma visualização de lâmina de exemplo:
O que acontece?
GlobalComposer
classe é instanciada 1000 vezes usandoApp::make
.composing:some_partial_view_to_display_i
é tratado 1000 vezes.compose
função dentro daGlobalComposer
classe é chamada 1000 vezes.Mas a visão parcial
some_partial_view_to_display_i
não tem nada a ver com as variáveis compostas,GlobalComposer
mas aumenta bastante o tempo de renderização.Melhor abordagem?
Usando
View::share
junto um middleware agrupado.Atualizar
Se você estiver usando algo calculado no pipeline de middleware, poderá simplesmente ouvir o evento apropriado ou colocar o middleware de compartilhamento de exibição na última parte inferior do pipeline.
fonte
Na documentação:
Estou de acordo com Marwelln, basta colocá-lo na
AppServiceProvider
função de inicialização:Eu recomendo usar um nome específico para a variável, para evitar confusões ou erros com outras variáveis não globais.
fonte
A documentação é ouvida https://laravel.com/docs/5.4/views#view-composers, mas eu irei dividir
Procure o diretório app \ Providers no diretório raiz do seu aplicativo e crie o arquivo ComposerServiceProvider.php, copie e cole o texto abaixo nele e salve-o.
Na raiz do seu aplicativo, abra Config / app.php e procure a seção Providers no arquivo, copie e cole este 'App \ Providers \ ComposerServiceProvider', na matriz.
Ao fazer isso, criamos o Composer Service Provider. Quando você executa o aplicativo com o perfil Visualizar como http: // seudominio / algo / perfil , o provedor de serviços ComposerServiceProvider é chamado e a classe App \ Http \ ViewComposers \ ProfileComposer é instanciada chamando o método Composer devido ao código abaixo dentro do método ou função de inicialização.
Vá para o caminho do diretório app / Http
Crie o diretório chamado ViewComposers
Crie o arquivo ProfileComposer.php .
Agora vá para a sua visão ou, neste caso, Profile.blade.php e adicione
e isso mostrará a contagem de usuários na página de perfil.
Para mostrar a contagem em todas as páginas, mude
Para
fonte
Eu acho que o melhor caminho é com
View Composers
. Se alguém veio aqui e quer descobrir como fazê-lo com o View Composers, leia minha resposta => Como compartilhar uma variável em todas as visualizações?fonte
A documentação está aqui https://laravel.com/docs/5.4/views#view-composers, mas eu a detalharei 1. Procure o diretório Providers no diretório raiz e crie o ComposerServiceProvider.php com conteúdo
fonte
Dentro da sua pasta de configuração, você pode criar um nome de arquivo php, por exemplo "variable.php", com o conteúdo abaixo:
Agora, dentro de todas as visualizações, você pode usá-lo como
fonte
1) Em (app \ Providers \ AppServiceProvider.php)
2) no seu modelo de usuário
3) na sua opinião
fonte
Método Laravel 5.6: https://laravel.com/docs/5.6/views#passing-data-to-views
Exemplo, com o compartilhamento de uma coleção de modelos para todas as visualizações (AppServiceProvider.php):
fonte
Você tem duas opções:
1.Share via função de inicialização em App \ Providers \ AppServiceProvider
public function boot() { view()->share('key', 'value'); }
E acesse a variável $ key em qualquer arquivo de exibição.
Nota: Lembre-se de que você não pode acessar os dados atuais da sessão, autenticação e rota aqui. Essa opção é boa apenas se você deseja compartilhar dados estáticos. Suponha que você queira compartilhar alguns dados com base no usuário atual, rota ou qualquer variável de sessão personalizada que não possa fazer com isso.
'aliases' => [ ..., 'Helper' => App\HelperClass\Helper::class, ],
e crie Helper.php na pasta HelperClass na pasta App
e acessá-lo em qualquer lugar como
Helper::Sample()
Você não será restrito aqui a usar Auth, Route, Session ou quaisquer outras classes.
fonte