Estou lendo a documentação do Laravel Blade e não consigo descobrir como atribuir variáveis dentro de um modelo para uso posterior. Não posso fazer {{ $old_section = "whatever" }}
porque isso ecoará "tanto faz" e não quero isso.
Entendo que posso fazer <?php $old_section = "whatever"; ?>
, mas isso não é elegante.
Existe uma maneira melhor e elegante de fazer isso em um modelo Blade?
php
laravel
laravel-4
laravel-blade
dualidade_
fonte
fonte
<?php $old_section = "whatever"; ?>
. Acho bastante legível.Respostas:
É desencorajado fazer isso em uma exibição, para que não exista uma etiqueta blade. Se você quiser fazer isso na visualização do blade, basta abrir uma tag php enquanto a escrevia ou registrar uma nova tag blade. Apenas um exemplo:
fonte
{?
vez de apenas usar o nativo<?
?LARAVEL 5.5 E ACIMA
A diretiva @php blade não aceita mais tags embutidas. Em vez disso, use o formulário completo da diretiva:
LARAVEL 5.2 E ACIMA
Você pode apenas usar:
Ou você pode usá-lo em uma instrução de bloco:
LARAVEL 5
Estenda o Blade assim:
Em seguida, siga um destes procedimentos:
Solução rápida: se você é preguiçoso, basta colocar o código na função boot () do AppServiceProvider.php.
Solução mais agradável: crie um provedor de serviços próprio. Consulte https://stackoverflow.com/a/28641054/2169147 sobre como estender o blade no Laravel 5. É um pouco mais trabalhoso dessa maneira, mas é um bom exercício de como usar provedores :)
LARAVEL 4
Você pode simplesmente colocar o código acima na parte inferior de app / start / global.php (ou qualquer outro lugar, se achar que é melhor).
Após as alterações acima, você pode usar:
para definir uma variável.
fonte
@php(@i = 1)
-lo ou usá-lo em uma instrução de bloco (próximo a@endphp
)No laravel-4, você pode usar a sintaxe de comentário do modelo para definir / definir variáveis.
A sintaxe do comentário é
{{-- anything here is comment --}}
e é renderizada porlâmina motor como<?php /* anything here is comment */ ?>
então, com pouco truque, podemos usá-lo para definir variáveis, por exemplo
será processado por lâminaconforme
<?php /* */$i=0;/* */ ?>
define a variável para nós. Sem alterar nenhuma linha de código.fonte
<?php $i=0; ?>
Existe uma solução simples que não requer que você altere nenhum código, e funciona no Laravel 4 também.
Você apenas usa um operador de atribuição (
=
) na expressão passada para uma@if
instrução, em vez de (por exemplo) um operador como==
.Então você pode usá-lo em qualquer lugar que você possa usar qualquer outra variável
A única desvantagem é que sua tarefa parecerá um erro para alguém que não sabe que você está fazendo isso como uma solução alternativa.
fonte
Você está tornando isso muito complicado.
Basta usar php simples
donesies.
(ou https://github.com/alexdover/blade-set também parece bastante direto)
Estamos todos "invadindo" o sistema, definindo variáveis em visualizações, então por que tornar o "hack" mais complicado do que precisa?
Testado no Laravel 4.
Outro benefício é que o destaque da sintaxe funciona corretamente (eu estava usando o hack de comentários antes e era horrível ler)
fonte
Você pode definir variáveis no mecanismo de modelagem do blade das seguintes maneiras:
1.
Variável geral de configuração do bloco PHP :
<?php $hello = "Hello World!"; ?>
Saída:
{{$hello}}
2.
Variável de configuração do bloco PHP da lâmina :
@php $hello = "Hello World!"; @endphp
Saída:
{{$hello}}
fonte
Desde o Laravel 5.2.23, você tem a diretiva @php Blade , que pode ser usada em linha ou como instrução de bloco:
ou
fonte
Você pode definir uma variável no arquivo de exibição, mas ela será impressa exatamente como você a definiu. De qualquer forma, há uma solução alternativa. Você pode definir a variável dentro de uma seção não utilizada. Exemplo:
Em seguida
{{ $yourVar }}
, imprimiráYour value
onde quiser, mas você não obtém a saída quando salva a variável.EDIT: é necessário nomear a seção, caso contrário uma exceção será lançada.
fonte
No Laravel 4:
Se você deseja que a variável seja acessível em todas as suas visualizações, não apenas no seu modelo,
View::share
é um ótimo método ( mais informações neste blog ).Basta adicionar o seguinte em app / controllers / BaseController.php
e agora
$myvar
estará disponível para todas as suas visualizações, incluindo seu modelo.Usei isso para definir URLs de ativos específicos do ambiente para minhas imagens.
fonte
E de repente nada aparecerá. Pela minha experiência, se você tiver que fazer algo assim, prepare o html no método de um modelo ou faça alguma reorganização do seu código em matrizes ou algo assim.
Nunca existe apenas uma maneira.
fonte
$users = ...
, mas algo$css_class = ...
semelhante, projetando estritamente variáveis que não pertencem ao modelo ou controlador, conforme são determinadas pelo designer.Vou estender a resposta dada pelo @Pim.
Adicione isso ao método de inicialização do seu AppServiceProvider
Dessa forma, você não expõe a capacidade de escrever qualquer expressão php.
Você pode usar esta diretiva como:
fonte
No documento laravel https://laravel.com/docs/5.8/blade#php, você pode fazer o seguinte:
fonte
No Laravel 5.1, 5.2 :
https://laravel.com/docs/5.2/views#sharing-data-with-all-views
Editar arquivo:
/app/Providers/AppServiceProvider.php
fonte
Você pode usar o pacote que publiquei: https://github.com/sineld/bladeset
Então você define facilmente sua variável:
fonte
Quanto à minha maneira elegante é como o seguinte
E apenas ecoar sua
$old_section
variável.fonte
Se você possui PHP 7.0:
A maneira mais simples e eficaz é com a atribuição entre colchetes .
A regra é simples: você usa sua variável mais de uma vez? Em seguida, declare-o na primeira vez em que for usado entre parênteses, mantenha a calma e continue.
E sim, eu sei
@forelse
, isso é apenas uma demonstração.Como suas variáveis agora são declaradas como e quando são usadas, não há necessidade de nenhuma solução alternativa para o blade.
fonte
Eu não acho que você pode - mas, novamente, esse tipo de lógica provavelmente deve ser tratado em seu controlador e passado para a exibição já definida.
fonte
$previous_group_name
,$separator_printed
, Etc.app/controllers/BaseController.php
.Atribuir variável ao modelo blade, Aqui estão as soluções
Podemos usar a
<?php ?>
tag na página bladeOU
Podemos usar o comentário blade com sintaxe especial
fonte
Hackear comentários não é uma maneira muito legível de fazer isso. Os editores também o colorirão como um comentário e alguém poderá sentir falta ao ler o código.
Tente algo como isto:
Ele será compilado em:
... e fazer a tarefa e não ecoar nada.
fonte
É melhor praticar para definir variável no Controller e depois passar para visualizar usando
compact()
ou->with()
método.Caso contrário, o #TLGreg deu a melhor resposta.
fonte
Existe uma extensão muito boa para o Blade radic / blade-extensions . Depois de adicioná-lo, você pode usar @set (variable_name, variable_value)
fonte
Eu estava procurando uma maneira de atribuir um valor a uma chave e usá-lo várias vezes na minha opinião. Nesse caso, você pode usar
@section{"key", "value"}
em primeiro lugar e depois chamar@yield{"key"}
para gerar o valor em outros lugares em sua exibição ou em seu filho.fonte
Na minha opinião, seria melhor manter a lógica no controlador e passá-la para a visão de uso. Isso pode ser feito de duas maneiras, usando o método 'View :: make'. Atualmente, estou usando o Laravel 3, mas tenho certeza de que é da mesma forma no Laravel 4.
ou
O método 'with' é encadeado. Você usaria o descrito acima da seguinte maneira:
Mais informações aqui:
http://three.laravel.com/docs/views
http://codehappy.daylerees.com/using-controllers
fonte
$format='Y-m-d H:i:s';
Dessa forma, você pode reutilizar esse formato na visualização. Isso certamente não pertence ao controlador. Dito isto, em resposta à pergunta ... Não há nada errado com as<?php ?>
tags.Eu tive uma pergunta semelhante e encontrei o que eu acho ser a solução correta com o View Composers
Os compositores de exibição permitem definir variáveis toda vez que uma determinada exibição é chamada e podem ser vistas específicas ou modelos de vista inteiros. De qualquer forma, eu sei que não é uma resposta direta à pergunta (e dois anos tarde demais), mas parece uma solução mais elegante do que definir variáveis em uma exibição com o blade.
fonte
laravel 5 você pode fazer isso facilmente. ver abaixo
fonte
Você pode estender a lâmina usando o método de extensão, como mostrado abaixo.
depois disso, inicialize as variáveis da seguinte maneira.
fonte
funciona em todas as versões do blade.
fonte