Testdriving with Yii
In this section, we describe how to create a skeleton application that will serve as our starting point. For simplicity, we assume that the document root of our Web server is /wwwroot
and the corresponding URL is http://www.example.com/
.
1. Installing Yii ¶
We first install the Yii framework. Grab a copy of the Yii release file (version 1.0.3 or above) from www.yiiframework.com and unpack it to the directory /wwwroot/yii
. Double check to make sure that there is a directory /wwwroot/yii/framework
.
Tip: The Yii framework can be installed anywhere in the file system. Its
framework
directory contains all framework code and is the only directory needed when deploying an Yii application. A single installation of Yii can be used by multiple Yii applications.
After installing Yii, open a browser window and access the URL http://www.example.com/yii/requirements/index.php
. It shows the requirement checker provided in the Yii release. Make sure our Web server and PHP installation reaches the minimal requirement by Yii. In particular, we should enable both the pdo
and pdo_sqlite
PHP extensions which are required by our blog application to access the SQLite database.
2. Creating Skeleton Application ¶
We then use the yiic
tool to create a skeleton application under the directory /wwwroot/blog
. The yiic
tool is a command line tool provided in the Yii release. It can be used to generate code for certain tasks.
Open a command window and execute the following command:
% /wwwroot/yii/framework/yiic webapp /wwwroot/blog Create a Web application under '/wwwroot/blog'? [Yes|No]y ......
Tip: In order to use the
yiic
tool as shown above, the CLI PHP program must be on the command search path. If not, the following command may be used instead:path/to/php /wwwroot/yii/framework/yiic.php webapp /wwwroot/blog
To try out the application we just created, open a Web browser and navigate to the URL http://www.example.com/blog/index.php
. We shall see that our application has three fully functional pages: the homepage, the contact page and the login page.
In the following, we briefly describe what we have in this skeleton application.
Entry Script
We have an entry script file /wwwroot/blog/index.php
which has the following content:
$yii='/wwwroot/framework/yii.php'; $config=dirname(__FILE__).'/protected/config/main.php'; // remove the following line when in production mode defined('YII_DEBUG') or define('YII_DEBUG',true); require_once($yii); Yii::createWebApplication($config)->run();
This is the only script that Web users can directly access. The script first includes the Yii bootstrap file yii.php
. It then creates an application instance with the specified configuration and executes the application.
Base Application Directory
We also have an application base directory /wwwroot/blog/protected
. The majority of our code and data will be placed under this directory, and it should be protected from being accessed by Web users. For Apache httpd Web server, we place under this directory a .htaccess
file with the following content:
deny from all
For other Web servers, please refer to the corresponding manual on how to protect a directory from being accessed by Web users.
3. Application Workflow ¶
To help understand how Yii works, we describe the main workflow in our skeleton application when a user is accessing its contact page:
- The entry script is executed by the Web server to process the request;
- An application instance is created and configured with initial property values specified in the application configuration file
/wwwroot/blog/protected/config/main.php
; - The application resolves the request into a controller and a controller action. For the contact page request, it is resolved as the
site
controller and thecontact
action; - The application creates the
site
controller in terms of aSiteController
instance and then executes it; - The
SiteController
instance executes thecontact
action by calling itsactionContact()
method; - The
actionContact
method renders a view namedcontact
to the Web user. Internally, this is achieved by including the view file/wwwroot/blog/protected/views/site/contact.php
and embedding the result into the layout file/wwwroot/blog/protected/views/layouts/main.php
.