By Shahzad Malik ([email protected]
Nov 22, 2014
By Shahzad Malik ([email protected])
yii?
IS it fast? ...
IS it secure? ...
IS it professional? ...
IS it right for my next project?
Yes It Is!
Topics
• Introduction to Yii– Workflow (MVC)– Installation Steps
• Features• Some Code Samples
– Model– Using Model from Controller– Controller– View
Topics
• Performance
Introduction
Introduction
Yii is a free, open-source Web application development framework written in PHP5 that promotes clean, DRY design and encourages rapid development. It works to streamline your application development and helps to ensure an extremely efficient, extensible, and maintainable end product.Source: http://www.yiiframework.com/about/
Introduction – Workflow (MVC)
Introduction - Installation
5STEPS
Introduction - Installation
STEP 1
http://www.yiiframework.com/download
Introduction - Installation
STEP 2
Extract framework folder to any directory with access rights
Introduction - Installation
STEP 3Extract requirements folder to a web-accessible directory http://www.example.com/requirements
Requirements
Introduction - Installation
STEP 4
Open console (Command Prompt) and run following command from web-accessible directory/path/to/php.exe /path/to/framework/yiic.php webapp myfirstyiiapp
Introduction - Installation
STEP 5 That’s it
Introduction – Installation - Summary
Extract framework folderSTEP 2
Check requirementsSTEP 3
Run install command from consoleSTEP 4
DownloadSTEP 1
Introduction – Installation - Preview
Features
Features
Features
• Skinning and themingYou can select theme at project level, controller level, action level Or based on some condition in action.
• Error handling and logging Errors are handled and presented more nicely, and log messages can be categorized, filtered and routed to different destinations.
Features
• Automatic code generationYii provides a set of spontaneous and highly extensible code generation tools that can help you quickly generate the code you need for features such as form input, CRUD.
• Unit and functionality testingTest-Driven Development - using PHPUnit and Selenium Remote Control
Features
• Authentication and authorizationYii has built-in authentication support. It also supports authorization via hierarchical role-based access control.
• Layered caching schemeYii supports data caching, page caching, fragment caching and dynamic content. The storage medium of caching can be changed easily without touching the application code.
Features - Extensions
Auth (42)Caching (22)Console (17)Database (100)Date and Time (24)Error Handling (4)File System (29)Logging (26)Mail (16)Networking (21)Security (15)User Interface (475)Validation (65)Web Service (77)Others (289)
Some code samples
Modelclass Post extends CActiveRecord{ /** * Retrieves a list of models based on the current search/filter conditions. * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions. */ public function search() { $criteria=new CDbCriteria;
$criteria->compare('content ',$this->content ); $criteria->compare('title ',$this->title ,true); return new CActiveDataProvider($this, array( 'criteria'=>$criteria, )); }}
Model From Controller
Create$post = new Post;$post->title = 'sample post';$post->content = 'post body content';$post->save(); <- This is validated
Select$post=Post::model()->find(array( 'select'=>'title', 'condition'=>'postID=:postID', 'params'=>array(':postID'=>2),));
Update$post = Post::model()->findByPk(2);$post->title = ‘New title’;$post->save(); <- This is validated
Controllerclass PostController extends Controller { /** * Displays a particular model. * @param integer $id the ID of the model to be displayed */ public function actionView($id) { $post = Post::model()->findByPk($id); if(!$post) throw new CHttpException(404); $this->render('view', array( 'post' => $post, )); }}
View$this->breadcrumbs=array( 'Posts'=>array('index'), $post>title, ); ?>
<h1>View Post #<?php echo $post>id; ?></h1>
<?php $this->widget('zii.widgets.CDetailView', array( 'data'=>$post, 'attributes'=>array( 'title', 'content', ), )); ?>
Performance
Performance
Performance – Lazy loading example
/** * @return array relational rules. */ public function relations() { return array( 'userRole' => array(self::BELONGS_TO, 'TblRole', 'user_role_id'), ); }TblU
ser M
odal
Sche
ma
Performance – Lazy loading example
<table> <tr><th>User id</th><td><?php echo $user->id; ?></td></tr> <tr><th>User name</th><td><?php echo $user->username; ?></td></tr> <tr><th>Role</th><td><?php echo $user->user_role_id; ?></td></tr></table>
Performance – Lazy loading example
<table> <tr><th>User id</th><td><?php echo $user->id; ?></td></tr> <tr><th>User name</th><td><?php echo $user->username; ?></td></tr> <tr><th>Role</th><td><?php echo $user->userRole->role_name; ?></td></tr></table>
Performance – Drupal & Yii
Performance – Drupal & Yii
Performance – Drupal & Yii