Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cakephp forms - Is there a way to make a field read only (in the view)

Tags:

cakephp

I have a Cakephp 1.3 form that allows users to edit the profile data. But some of the information in the forms needs to be read only (sometimes).

Is my only option to echo and format the field contents in the read only case or is there a flag in the Cake form that allows for read only fields. Ideally the read only fields would be greyed out similar to other interfaces.

    echo $this->Form->create('User', array('url' => array('controller' => 'User', 'action'=>'editUser')));

    echo $this->Form->input('id', array('type'=>'hidden'));

If (!isset($IsAdmin)) {
    // Only display username - read only! Add code here
    echo $this->Form->input('username', array('label' => __d('users', 'User',true)));
} else {
    // Admins can edit user names
    echo $this->Form->input('username', array('label' => __d('users', 'User',true)));
}           

 ... more fields here

    echo $this->Form->end(__d('users', 'Submit',true));
like image 342
Michaelkay Avatar asked Mar 17 '13 13:03

Michaelkay


People also ask

What does the 'url' option do in CakePHP?

This allows CakePHP to emulate proper REST support in web browsers. Using the 'url' option allows you to point the form to a specific action in your current controller or another controller in your application.

What is the use of formhelper in cake?

class Cake\View\Helper\FormHelper(View $view, array $config = []) The FormHelper does most of the heavy lifting in form creation. The FormHelper focuses on creating forms quickly, in a way that will streamline validation, re-population and layout.

How to use belongs to many associations in CakePHP?

The above example shows an expanded example for belongs to many associations, with separate inputs for each entity and join data record. You can also create a multiple select input for belongs to many associations: You can add custom control widgets in CakePHP, and use them like any other control type.

How to add custom control widgets in CakePHP?

You can add custom control widgets in CakePHP, and use them like any other control type. All of the core control types are implemented as widgets, which means you can override any core widget with your own implementation as well. Widget classes have a very simple required interface. They must implement the Cake\View\Widget\WidgetInterface.


2 Answers

You can add a 'disabled' key to the options array, however realise that this is only the front-end/presentation of the form, people will be able to override the 'disabled' property of the input field and modify its value.

To prevent unwanted changes to be saved, you need to specify a 'fieldList' when saving the data using your model

To output a disabled form field;

echo $this->Form->input('fieldname', array('type'=>'hidden', 'disabled' => 'disabled'));

Then, when saving the data, specify a fieldlist (documentation: http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Models.html#saving-your-data)

$this->MyModel->save($this->data, true, array('field1', 'field2'));

The fieldlist should include all fields that are allowed to be updated by the user

like image 71
thaJeztah Avatar answered Sep 30 '22 21:09

thaJeztah


The disabled attribute is fine but actually, input fields have a 'readonly' attribute. And it sounds like you want the field to still be shown to the user so using 'hidden' isn't really addressing what you want done.

So an alternative (and actually specifically addressing your requirement for 'read only'):

echo $this->Form->input('fieldname', array('readonly' => 'readonly'));

I found that using disabled prevents jquery click triggers from firing versus readonly still fires e.g. using a bootstrap datepicker text field

Here's a link to WC3 for it: http://www.w3schools.com/tags/att_input_readonly.asp

like image 28
Stephen Siu Avatar answered Sep 30 '22 21:09

Stephen Siu