Faisal
Faisal

Reputation: 4767

Changing Radio button Input template using CakePHP 3

I would like change structure but it does not work, it's always the same structure. How to solve my problem?

 <?php
$default = 'wepay';
$options = array('wepay' => 'WePay', 'paypal' => 'Paypal', 'donorbank' => 'Donor Bank');
echo $this->Form->input('payment_method', [
    'templates' => [
        'radioWrapper' => '<label class="radio-inline">{{label}}</label>'],
    'type'      => 'radio',
    'options'   => $options,
    'default'   => $default
]);
?>

But this code does not generate output properly. I want to generate output like below:

<label class="radio-inline">
    <input type="radio" name="payment_method" value="wepay" id="payment-method-wepay" checked="checked">WePay
</label>
<label class="radio-inline">
    <input type="radio" name="payment_method" value="paypal" id="payment-method-paypal">Paypal
</label>
<label class="radio-inline">
    <input type="radio" name="payment_method" value="donorbank" id="payment-method-donorbank">Donor Bank
</label>  

My Code generate output like below:

<label class="radio-inline">
    <label for="payment-method-wepay">
        <input type="radio" name="payment_method" value="wepay" id="payment-method-wepay" checked="checked">WePay
    </label>
</label>
<label class="radio-inline">
    <label for="payment-method-paypal">
        <input type="radio" name="payment_method" value="paypal" id="payment-method-paypal">Paypal
    </label>
</label>
<label class="radio-inline">
    <label for="payment-method-donorbank"><input type="radio" name="payment_method" value="donorbank" id="payment-method-donorbank">Donor Bank
    </label>
</label>   

Here one extra label field added. How can I remove this extra-label?

Upvotes: 0

Views: 567

Answers (2)

Faisal
Faisal

Reputation: 4767

Finally, solved my problem using @ndm hints. Final solution like this below

<?php
$default = 'wepay';
$options = array('wepay' => 'WePay', 'paypal' => 'Paypal', 'donorbank' => 'Donor Bank');
echo $this->Form->input('payment_method', [
    'nestingLabel' =>
         '{{hidden}}<label class="radio-inline"{{attrs}}>{{input}}{{text}}</label>',
    'type'      => 'radio',
    'options'   => $options,
    'default'   => $default
]);
?>

Hope this solution help others in future.

Upvotes: 0

ndm
ndm

Reputation: 60453

What you are showing there is pretty much the default output, except for the class attribute and the missing for attribute on the label. So what you want to modify most probably is the nestingLabel template, surely not the radioWrapper one:

 'nestingLabel' =>
     '{{hidden}}<label class="radio-label"{{attrs}}>{{input}}{{text}}</label>'

If you want to remove the for attribute, then you'll have to remove the {{attrs}} placeholder, that way no further attributes can be added to the label element.

Upvotes: 1

Related Questions