2013-05-17 25 views
7

Có cách nào dễ dàng để đặt nhãn HTML thô để gắn nhãn không? Tôi có điều này:laravel 4: Cách chèn HTML thô vào nhãn?

{{ Form::label('firstName', 'First name <em>*</em>', array('class' => 'input_tag')) }} 

và nó tạo ra:

<label class="input_tag" for="firstName">First Name &lt;em&gt;*&lt;/em&gt;</label> 

NHƯNG thẻ EM không được hiểu như nó phải được. Những gì tôi muốn là:

<label class="input_tag" for="firstName">First Name <em>*</em></label> 
+0

gì nên sản lượng html có đúng không? –

+0

Đây là đầu vào HTML chính xác nhưng trên trang web gần đầu vào là "Tên đầu tiên *" không phải "Tên đầu tiên *" –

+1

Lưu ý, HTML được tạo thực sự được mã hóa: ' 'và không hoàn toàn như đã nêu ở trên. – Jason

Trả lời

10

Sử dụng sprintf trong một macro là nhanh hơn nhiều so redecoding:

Form::macro('rawLabel', function($name, $value = null, $options = array()) 
{ 
    $label = Form::label($name, '%s', $options); 

    return sprintf($label, $value); 
}); 
+4

Nếu bạn chỉ cần điều này một lần và bạn muốn có một giải pháp nhanh chóng và dễ dàng, bạn cũng có thể thực hiện nó ngay, ví dụ: '{{sprintf (Mẫu :: nhãn ('tncs', '% s', mảng ('class' => 'nhãn điều khiển tncs-label')), 'Tôi đồng ý với terms and conditions')}}' – neilcrookes

+0

Có , điều đó sẽ hiệu quả, nhưng ngay cả đối với 1 giải pháp sử dụng thì vẫn tốt hơn để giải nén nó ra. Thật xấu xí và khó hiểu. –

+0

Vị trí thích hợp cho "widget" này ở đâu nếu tôi muốn sử dụng nó trong nhiều Chế độ xem? Tôi muốn bao gồm nó chỉ một lần, không phải mỗi lần tôi sẽ cần nó. –

-1

Got nó, nó sử dụng chức năng helper e() có sử dụng htmlentities() để định dạng các nhãn của bạn và điều này được chuyển đổi thẻ của bạn để &amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;.

Các nhanh chóng và (rất) bẩn sửa chữa là để thêm video này start.php của bạn hoặc một số nơi khác trước khi cuộc gọi đầu tiên Helpers.php:

function e($value) { return $value; } 

Nhưng điều này xa lý tưởng.

0

Tôi thường sử dụng html thô cho đầu vào biểu mẫu và nhãn vì tôi thấy dễ đọc hơn và sử dụng thuộc tính html5 như yêu cầu và trình giữ chỗ. Biểu mẫu này là một ví dụ tốt về cách sử dụng html thô với Input :: old cho phép bạn nắm bắt đầu vào cũ. https://github.com/Zizaco/confide/blob/master/src/views/login.blade.php

-2

Tôi tin rằng Biểu mẫu :: nhãn ($ name, $ value, $ attributes, $ escape_html) lấy thông số thứ tư cho biết có nên thoát khỏi html hay không. Nó mặc định là đúng. Vì vậy, nếu kết quả mong đợi của bạn là một nghiêng *, vượt qua false như tham số thứ tư.

+1

Nhìn vào tài liệu API cho biểu mẫu :: nhãn, chúng ta có thể thấy rằng không có tham số thứ tư để thoát html. http://laravel.com/api/source-class-Illuminate.Html.FormBuilder.html#171-188 – ericrjones1

1

Bạn có thể tạo một hàm helper (macro) chỉ thích:

HTML::macro('raw', function($htmlbuilder) { 
    return htmlspecialchars_decode($htmlbuilder); 
}); 

theo quan điểm của bạn:

{{ HTML::raw(Form::label('input_firstname', 'Prénom <sup>*</sup>')) }} 
0

Đối với đầu vào cần thiết, thay vì cố gắng thêm HTML vào nhãn, tôi thêm một lớp, 'bắt buộc-đầu vào' (hoặc một cái gì đó).

Sau đó, tôi có quy tắc CSS sau

label.required-input:before { 
    content: ' * '; 
    color: #f00; 
} 

này sẽ làm việc trừ khi bạn đang cần phải có <em> * </em > trình đọc màn hình. Nhưng bạn vẫn có thể thêm cờ bắt buộc vào đầu vào.

11

sử dụng HTML :: decode():

http://forums.laravel.io/viewtopic.php?id=1772

{{ HTML::decode(Form::label('firstName', 'First name <em>*</em>', array('class' => 'input_tag'))) }} 
+2

Điều đó sẽ làm việc trong ví dụ cụ thể này, nhưng lưu ý rằng có thể có các thực thể khác trong phần tử nhãn kết quả bạn không muốn giải mã. – Jason

+0

Điều này làm việc như một say mê. Bạn có thể cần phải sử dụng {!! !!} thay vì {{ }}. Cảm ơn vì tiền hỗ trợ! – cbloss793