2012-02-09 42 views
9

Làm cách nào để tạo hai nút radio với một nút được chọn trước dựa trên giá trị của $ foo? Đoạn mã dưới đây tạo ra chúng tốt nhưng không chọn một trong hai nút.CakePHP tạo các nút radio

$options = array('standard' => ' Standard','pro' => ' Pro'); 
$attributes = array(
    'legend' => false, 
    'value' => false, 
    'checked'=> ($foo == "pro") ? FALSE : TRUE, 
); 
echo $this->Form->radio('type',$options, $attributes); 

Trả lời

23

Nó đơn giản .. sử dụng các giá trị mặc định $ foo:

$options = array(
    'standard' => 'Standard', 
    'pro' => 'Pro' 
); 

$attributes = array(
    'legend' => false, 
    'value' => $foo 
); 

echo $this->Form->radio('type', $options, $attributes); 

Như bạn có thể nhìn thấy trên các tài liệu:

http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::radio

+0

a) anh ta đang sử dụng 1,3 - b) câu trả lời này đang phá hủy ý tưởng "các hình thức liên tục". hãy tự mình thử. đăng biểu mẫu này và tự mình xem. nếu có, bạn có thể sử dụng tham số biểu mẫu "mặc định" thay vì "giá trị". – mark

+0

Tôi xác nhận "mặc định" hoạt động, do đó, "giá trị". Giá trị – stef

+0

= luôn luôn có cùng giá trị - mặc định = khi nó được đăng và vô hiệu hóa biểu mẫu giữ giá trị đã chọn trước đó (mặc dù có giá trị mặc định khác).đó là lý do tại sao chỉ mặc định nên được sử dụng. – mark

3

bạn nên chọn trước giá trị cho bất kỳ lĩnh vực hình thức từ bộ điều khiển

@see http://www.dereuromark.de/2010/06/23/working-with-forms/ "Giá trị mặc định"

+0

Xin lỗi tôi không thấy cách liên kết đó giải quyết được vấn đề. – stef

+0

tốt, tất cả được đặt ra cho bạn ở đó bằng văn bản: trong khối ELSE trong bộ hành động của bạn: $ this-> data [Model] [field] = defaultvalue (trong trường hợp của bạn là 'standard' hoặc 'pro'). và vui lòng đề cập đến phiên bản cakephp của bạn trong câu hỏi tiếp theo! bởi vì với 2.0 nó sẽ là $ this-> request-> data - nhưng không biết phiên bản bạn đang sử dụng thì khó có thể cung cấp cho bạn một giải pháp chính xác. – mark

+0

Vì vậy, tôi chỉ có thể chọn trước một nút radio bằng cách đặt mã trong bộ điều khiển, trong khi đánh dấu thực tế để tạo ra radio là trong giao diện? Tôi đang sử dụng 1.3 – stef

1

Đây là con đường để đi

$attributes = array(); 
    $options = array('standard' => 'Standard', 'pro' => 'Pro'); 

    if($foo === 'pro') { 
     $attributes['default'] = 'pro'; 
    } 

    echo $this->Form->radio('type', $options, $attributes); 

Một giải pháp tốt hơn là đặt các giá trị mặc định trong bộ điều khiển như Mark đã chỉ ra. Bằng cách đó bạn có thể thiết lập giá trị mặc định ở phần cuối của hành động của bộ điều khiển của bạn như ...

Giả sử mô hình của bạn là Member với membership_type field

$this->data['Member']['membership_type '] = 'pro'; 
+0

tôi không đồng ý. giá trị mặc định cho các trường có thể có nhiều hơn một trạng thái là một phần của logic và nên được cung cấp từ bộ điều khiển (giải pháp của bạn có vẻ như trên không và có thể cũng sẽ phá vỡ lỗi xác thực). trường hợp sử dụng duy nhất nơi cấp độ xem phù hợp: nếu giá trị mặc định/giá trị được gắn với một giá trị cụ thể (luôn giữ nguyên). – mark

+0

yeah rõ ràng là cách tốt hơn để làm điều này là trong bộ điều khiển. nhưng đây chỉ là một giải pháp khả thi vì OP không hỏi phương pháp nào để sử dụng. Tôi đã cập nhật bài đăng, cảm ơn vì đã chỉ ra. – Ehtesham

0
$options = array('Y'=>'Yes','N'=>'No'); 

$attributes = array('div' => 'input', 'type' => 'radio', 'options' => $options, 'default' => 'Y'); 

echo $this->Form->input('add to business directory',$attributes); 

HTH

+0

Chỉ cần một người đứng đầu, Trong CakePHP 2.x Tôi không chắc chắn nó là trường hợp cú pháp này vẫn sẽ làm việc. Chỉ là một người đứng đầu của bất cứ ai đến với câu hỏi này. – usumoio