2014-10-01 47 views
7

Nếu bạn làm điều này bạn nhận được một lỗi:Laravel Blade không có khoảng trống thừa?

<p>@if($foo)@if($bar)[email protected]@endif</p> 

Và nếu bạn làm điều này, bạn sẽ có được <p> test </p>, thêm quá nhiều whitepace:

<p>@if($foo) @if($bar)[email protected] @endif</p> 

Có cách nào để tránh điều này?

Chỉnh sửa: xem câu trả lời của tôi bên dưới để biết câu trả lời được cập nhật. Có một cách sạch sẽ để làm điều này mà không có hacks hoặc thư viện bên ngoài.

Trả lời

3

điều này dường như nhận được rất nhiều lưu lượng truy cập tìm kiếm, vì vậy tôi đã hình dung rằng tôi sẽ thêm bản cập nhật để chia sẻ cách tôi xử lý những ngày này. Về cơ bản, nó là mã nhiều hơn một chút nhưng nó kết thúc lên được ngu ngốc đơn giản và rất sạch sẽ:

@if($foo) 
    <p>Test</p> 
@elseif($bar) 
    <p>Test2</p> 
@else 
    <p>Test3</p> 
@endif 

Các đạo đức của câu chuyện là khi bạn đang làm việc với lưỡi, đừng cố nhồi nhét nhiều điều kiện trong vòng các yếu tố. Thay vào đó, có kết quả của điều kiện chứa phần tử. Nó sạch sẽ, dễ đọc và chỉ với một vài ký tự được sử dụng.

+0

Tôi đã gặp vấn đề này với đường dẫn của tôi, tôi đã gói chúng lại trong một ''. Về cơ bản cùng một giải pháp. Cảm ơn bạn vì câu trả lời! –

+1

Trong khi nó đau tôi để nghỉ mát theo cách tiếp cận này (như có vẻ là không có thay thế), nó là đáng ngạc nhiên hiệu quả. Cảm ơn bạn! –

21

Hãy thử với một nhà điều hành ternary, không có kiểm soát khoảng trắng trong Laravel

<p>{{ $foo ? ($bar ? 'test' : '') : ''}}</p> 
+2

Được bỏ phiếu cho giải pháp thay thế cho ví dụ cụ thể. – Citizen

3

Theo như tôi biết không có spaceless thẻ trong Blade. Nếu bạn muốn sử dụng các thẻ Blade chuẩn, bạn sẽ có thêm không gian. Có một github discussion với đề xuất cho thẻ mới

7

Bạn luôn có thể sử dụng gói hedronium/spaceless-blade trên packagist để thêm chức năng này vào Blade.

+0

aint làm việc cho 'foreach loop', vẫn nhận được khoảng trống –

+0

Gói tham chiếu được thiết kế để loại bỏ khoảng trắng trong nội dung giữa các chỉ thị Blade đã được phân tích cú pháp *, chứ không phải giữa các chỉ thị * liền kề với khoảng trống duy nhất giữa chúng. Liên kết trong câu trả lời của Macin làm rõ sự khác biệt. Đây là lý do mà công cụ Twig của Symfony bao gồm '{% spaceless%}' và '{% endspaceless%}', mặc dù thực tế là cú pháp thẻ của nó sử dụng mở * và * dấu phân cách đóng ('{%' và '%}'). Nói cách khác, giải pháp được đề xuất đề cập đến một vấn đề khác. –

Các vấn đề liên quan