-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
form.view.txt
108 lines (84 loc) · 3.42 KB
/
form.view.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Creating Form
=============
Writing the `login` view is straightforward. We start with a `form` tag
whose action attribute should be the URL of the `login` action described
previously. We then insert labels and input fields for the attributes
declared in the `LoginForm` class. At the end we insert a submit button
which can be clicked by users to submit the form. All these can be done in
pure HTML code.
Yii provides a few helper classes to facilitate view composition. For
example, to create a text input field, we can call [CHtml::textField()]; to
create a drop-down list, call [CHtml::dropDownList()].
> Info: One may wonder what is the benefit of using helpers if they
> require similar amount of code when compared with plain HTML code. The
> answer is that the helpers can provide more than just HTML code. For
> example, the following code would generate a text input field which can
> trigger form submission if its value is changed by users.
> ~~~
> [php]
> CHtml::textField($name,$value,array('submit'=>''));
> ~~~
> It would otherwise require writing clumsy JavaScript everywhere.
In the following, we use [CHtml] to create the login form. We assume that
the variable `$model` represents `LoginForm` instance.
~~~
[php]
<div class="form">
<?php echo CHtml::beginForm(); ?>
<?php echo CHtml::errorSummary($model); ?>
<div class="row">
<?php echo CHtml::activeLabel($model,'username'); ?>
<?php echo CHtml::activeTextField($model,'username') ?>
</div>
<div class="row">
<?php echo CHtml::activeLabel($model,'password'); ?>
<?php echo CHtml::activePasswordField($model,'password') ?>
</div>
<div class="row rememberMe">
<?php echo CHtml::activeCheckBox($model,'rememberMe'); ?>
<?php echo CHtml::activeLabel($model,'rememberMe'); ?>
</div>
<div class="row submit">
<?php echo CHtml::submitButton('Login'); ?>
</div>
<?php echo CHtml::endForm(); ?>
</div><!-- form -->
~~~
The above code generates a more dynamic form. For example,
[CHtml::activeLabel()] generates a label associated with the specified
model attribute. If the attribute has an input error, the label's CSS class
will be changed to `error`, which changes the appearance of the label with
appropriate CSS styles. Similarly, [CHtml::activeTextField()] generates a
text input field for the specified model attribute and changes its CSS
class upon any input error.
If we use the CSS style file `form.css` provided by the `yiic` script, the
generated form would be like the following:
![The login page](login1.png)
![The login with error page](login2.png)
Starting from version 1.1.1, a new widget called [CActiveForm] is provided
to facilitate form creation. The widget is capable of supporting seamless and
consistent validation on both client and server sides. Using [CActiveForm],
the above view code can be rewritten as:
~~~
[php]
<div class="form">
<?php $form=$this->beginWidget('CActiveForm'); ?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->label($model,'username'); ?>
<?php echo $form->textField($model,'username') ?>
</div>
<div class="row">
<?php echo $form->label($model,'password'); ?>
<?php echo $form->passwordField($model,'password') ?>
</div>
<div class="row rememberMe">
<?php echo $form->checkBox($model,'rememberMe'); ?>
<?php echo $form->label($model,'rememberMe'); ?>
</div>
<div class="row submit">
<?php echo CHtml::submitButton('Login'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
~~~