[php] 라 라벨 블레이드 템플릿에서 변수를 설정하는 방법

Laravel Blade 설명서를 읽고 있는데 나중에 사용할 템플릿 내에 변수를 할당하는 방법을 알 수 없습니다. 나는 {{ $old_section = "whatever" }}그것이 “무엇이든”을 반향시키고 그것을 원하지 않기 때문에 할 수 없습니다 .

나는 할 수 있음을 이해 <?php $old_section = "whatever"; ?>하지만 우아하지 않습니다.

블레이드 템플릿에서 더 좋고 우아한 방법이 있습니까?



답변

블레이드 태그가 없으므로보기에서는 사용하지 않는 것이 좋습니다. 블레이드보기에서이 작업을 수행하려면 PHP 태그를 작성한대로 열거 나 새 블레이드 태그를 등록하면됩니다. 예를 들면 :

<?php
/**
 * <code>
 * {? $old_section = "whatever" ?}
 * </code>
 */
Blade::extend(function($value) {
    return preg_replace('/\{\?(.+)\?\}/', '<?php ${1} ?>', $value);
});


답변

LARAVEL 5.5 이상

@php 블레이드 지시어는 더 이상 인라인 태그를 허용하지 않습니다. 대신 지시문의 전체 형식을 사용하십시오.

@php
$i = 1
@endphp

라 라벨 5.2 이상

당신은 단지 사용할 수 있습니다 :

@php ($i = 1)

또는 블록 명령문에서 사용할 수 있습니다.

@php
$i = 1
@endphp

라 라벨 5

다음과 같이 블레이드를 확장하십시오.

/*
|--------------------------------------------------------------------------
| Extend blade so we can define a variable
| <code>
| @define $variable = "whatever"
| </code>
|--------------------------------------------------------------------------
*/

\Blade::extend(function($value) {
    return preg_replace('/\@define(.+)/', '<?php ${1}; ?>', $value);
});

그런 다음 다음 중 하나를 수행하십시오.

빠른 해결책 : 게으른 경우 AppServiceProvider.php의 boot () 함수에 코드를 넣으십시오.

더 나은 솔루션 : 자체 서비스 제공 업체를 만드십시오. Laravel 5에서 블레이드를 확장하는 방법 은 https://stackoverflow.com/a/28641054/2169147 을 참조 하십시오 .이 방법은 조금 더 많은 작업이지만 공급자를 사용하는 방법에 대한 좋은 연습입니다. 🙂

라 라벨 4

위의 코드를 app / start / global.php (또는 더 나은 느낌이 든다면 다른 곳) 의 맨 아래에 넣으십시오 .


위의 변경 후 다음을 사용할 수 있습니다.

@define $i = 1

변수를 정의합니다.


답변

템플릿 주석 구문을 사용하여 변수를 정의 / 설정할 수 있습니다.

주석 구문은 {{-- anything here is comment --}} 의해 렌더링됩니다. 엔진

<?php /* anything here is comment */ ?>

약간의 트릭으로 변수를 정의하는 데 사용할 수 있습니다. 예를 들어

{{-- */$i=0;/* --}}

에 의해 렌더링됩니다
<?php /* */$i=0;/* */ ?>하는 우리를 위해 변수를 설정합니다. 코드 줄을 바꾸지 않고.


답변

코드를 변경할 필요가없는 간단한 해결 방법이 있으며 Laravel 4에서도 작동합니다.

예를 들어와 같은 연산자 대신 문에 =전달 된 식에 대입 연산자 ( )를 사용하면 @if됩니다 ==.

@if ($variable = 'any data, be it string, variable or OOP') @endif

그런 다음 다른 변수를 사용할 수있는 곳이라면 어디서나 사용할 수 있습니다.

{{ $variable }}

유일한 단점은 과제를 해결 방법으로 수행하고 있음을 알지 못하는 사람에게는 과제가 실수처럼 보일 것입니다.


답변

나중에 너무 복잡하게 만들고 있습니다.

그냥 일반 PHP를 사용하십시오

<?php $i = 1; ?>
{{$i}}

논문.

(또는 https://github.com/alexdover/blade-set도 꽤 까다로워 보입니다)

우리는 모두보기에서 변수를 설정하여 시스템을 “해킹”하고 있는데, 왜 “해킹”을 더 복잡하게 만드는가?

Laravel 4에서 테스트되었습니다.

또 다른 이점은 구문 강조가 제대로 작동한다는 것입니다 (이전에 주석 해킹을 사용하고 있었고 읽기가 끔찍했습니다)


답변

블레이드 템플릿 엔진에서 변수를 설정할 수있는 방법은 다음과 같습니다.

1. 일반 PHP 블록
설정 변수 : <?php $hello = "Hello World!"; ?>
출력 : {{$hello}}

2. 블레이드 PHP 블록
설정 변수 : @php $hello = "Hello World!"; @endphp
출력 : {{$hello}}


답변

Laravel 5.2.23부터는 @php Blade 지시문 이 있으며 인라인 또는 블록 명령문으로 사용할 수 있습니다.

@php($old_section = "whatever")

또는

@php
    $old_section = "whatever"
@endphp