Create, read, update and delete (CRUD) are the four basic operations of data objects in an application. Because the task of implementing the CRUD operations is so common when developing Web applications, Yii provides some code generation tools under the name of Gii that can automate this process (also known as scaffolding) for us.
Note: Gii has been available since version 1.1.2. Before that, you would have to use the yiic shell tool to achieve the same task.
In the following, we will describe how to use this tool to implement CRUD operations for posts and comments in our blog application.
We first need to install Gii. Open the file
/wwwroot/blog/protected/config/main.php and add the following code:
return array( ...... 'import'=>array( 'application.models.*', 'application.components.*', ), 'modules'=>array( 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'pick up a password here', ), ), );
The above code installs the a module named
gii, which enables us to access the Gii module by visiting the following URL in browser:
We will be prompted to enter a password. Enter the password that we set in
/wwwroot/blog/protected/config/main.php previously, and we should see a page listing all available code generation tools.
Note: The above code should be removed when running on the production machine. Code generation tools should only be used on development machines.
We first need to create a model class for each of our database tables. The model classes will allow us to access the database in an intuitive object-oriented fashion, as we will see later in this tutorial.
Click on the
Model Generator link to start using the model generation tool.
Model Generator page, enter
tbl_user (the user table name) in the
Table Name field,
tbl_ in the
Table Prefix field and then press the
Preview button. A preview table will show up. We can click on the link in the table to preview the code to be generated. If everything is ok, we can press the
Generate button to generate the code and save it into a file.
Info: Because the code generator needs to save the generated code into files, it is required that the Web process have the permission to create and modify the corresponding files. For simplicity, we may give the Web process the write permission to the whole
/wwwroot/blogdirectory. Note that this is only needed on development machines when using
Repeat the same procedure for the rest of the database tables, including
Tip: We can also enter an asterisk character
Table Namefield. This will generate a model class for every database table in a single shot.
At this stage, we will have the following newly created files:
Userclass that extends from CActiveRecord and can be used to access the
Postclass that extends from CActiveRecord and can be used to access the
Tagclass that extends from CActiveRecord and can be used to access the
Commentclass that extends from CActiveRecord and can be used to access the
Lookupclass that extends from CActiveRecord and can be used to access the
After the model classes are created, we can use the
Crud Generator to generate the code implementing the CRUD operations for these models. We will do this for the
Crud Generator page, enter
Post (the name of the post model class we just created) in the
Model Class field, and then press the
Preview button. We will see a lot more files will be generated. Press the
Generate button to generate them.
Repeat the same procedure for the
PostControllerclass which is the controller in charge of all CRUD operations about posts;
CommentControllerclass which is the controller in charge of all CRUD operations about comments;
views/post/create.phpis the view file that shows an HTML form to create a new post;
views/post/update.phpis the view file that shows an HTML form to update an existing post;
views/post/view.phpis the view file that displays the detailed information of a post;
views/post/index.phpis the view file that displays a list of posts;
views/post/admin.phpis the view file that displays posts in a table with administrative commands.
views/post/_form.phpis the partial view file embedded in
views/post/update.php. It displays the HTML form for collecting post information.
views/post/_view.phpis the partial view file used by
views/post/index.php. It displays the brief view of a single post.
views/post/_search.phpis the partial view file used by
views/post/admin.php. It displays a search form.
We can test the features implemented by the code we just generated by accessing the following URLs:
Notice that the post and comment features implemented by the generated code are completely independent of each other. Also, when creating a new post or comment, we are required to enter information, such as
create_time, which in real application should be set by the program. Don't worry. We will fix these problems in the next milestones. For now, we should be fairly satisfied as this prototype already contains most features that we need to implement for the blog application.
In order to understand better how the above files are used, we show in the following the workflow that occurs in the blog application when displaying a list of posts:
PostControllerand executes it;
PostControllerinstance executes the
indexaction by calling its
actionIndex()method. Note that
indexis the default action if the user does not specify an action to execute in the URL;
actionIndex()method queries database to bring back the list of recent posts;
actionIndex()method renders the
indexview with the post data.