Yii
Yii is a high-performance PHP framework best for developing Web 2.0 applications.
Slackware installation
http://www.yiiframework.com/doc/guide/1.1/en/topics.url#hiding-x-23x
- cd ~/Downloads
wget https://github.com/yiisoft/yii/releases/download/1.1.15/yii-1.1.15.022a51.tar.gz
- cp yii-1.1.15.022a51.tar.gz /vars/www/htdocs
- cd /vars/www/htdocs
- tar xvzf yii-1.1.15.022a51.tar.gz
- cd yii-1.1.15.022a51
- chown apache * -R
- chmod 755 /etc/rc.d/rc.httpd
- vim /etc/httpd/httpd.conf
<IfModule dir_module> DirectoryIndex index.html index.php </IfModule> LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so Include /etc/httpd/mod_php.conf # enable the php module
- vim /etc/httpd/vhosts.conf
<VirtualHost *:80> ServerName localhostyii DocumentRoot "/var/www/htdocs/yii-1.1.15.022a51" <Directory "/var/www/htdocs/yii-1.1.15.022a51"> Require all granted AllowOverride all </Directory> </VirtualHost>
- vim /etc/hosts
127.0.0.1 localhostyii
- vim /etc/httpd/php.ini
date.timezone="Europe/Lisbon"
- vim /var/www/htdocs/yii-1.1.15.022a51/demos/blog/.htaccess
Options +FollowSymLinks IndexIgnore */* RewriteEngine on RewriteBase /demos/blog # if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # otherwise forward it to index.php RewriteRule . index.php
- vim blog/protected/config/main.php
'urlManager'=>array( 'showScriptName'=>false,
- /etc/rc.d/rc.httpd start
Validation rules ActiveRecord CModel
http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules
We specify the validation rules in the rules() method which should return an array of rule configurations.
Alias |
Class |
boolean |
CBooleanValidator |
captcha |
CCaptchaValidator |
compare |
CCompareValidator |
CEmailValidator |
|
date |
CDateValidator |
default |
CDefaultValueValidator |
exist |
CExistValidator |
file |
CFileValidator |
filter |
CFilterValidator |
in |
CRangeValidator |
length |
CStringValidator |
match |
CRegularExpressionValidator |
numerical |
CNumberValidator |
required |
CRequiredValidator |
type |
CTypeValidator |
unique |
CUniqueValidator |
url |
CUrlValidator |
Relations ActiveRecord
http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship
Override the relations() method of CActiveRecord.
Types relationship:
- self::BELONGS_TO
- self::HAS_MANY
- self::HAS_ONE
- self::MANY_MANY
ActiveResource extension
Adapted from http://www.yiiframework.com/extension/activeresource
Steps:
Get source code from https://github.com/Haensel/ActiveResource/
- Add the extension to Yii by placing it in your application's extension folder (for example '/protected/extensions')
- Edit your applications main.php config file and add 'application.extensions.EActiveResource.*' to your import definitions
- Add the configuration for your resources to the main config
'activeresource'=>array( 'class'=>'EActiveResourceConnection', 'site'=>'http://api.aRESTservice.com', 'contentType'=>'application/json', 'acceptType'=>'application/json', 'queryCacheId'=>'SomeCacheComponent' )
- Create a class extending EActiveResource like this (don't forget the model() method!):
ActiveResource implementation:
1 class Person extends EActiveResource
2 {
3 /* The id that uniquely identifies a person. This attribute is not defined
4 * as a property
5 * because we don't want to send it back to the service like a name, surname or
6 * gender etc.
7 */
8 public $id;
9
10 public static function model($className=__CLASS__)
11 {
12 return parent::model($className);
13 }
14
15 /* Define the resource property of this class */
16 public function rest()
17 {
18 return CMap::mergeArray(
19 parent::rest(),
20 array(
21 'resource'=>'people',
22 )
23 );
24 }
25
26 /* Let's define some properties and their datatypes*/
27 public function properties()
28 {
29 return array(
30 'name'=>array('type'=>'string'),
31 'surname'=>array('type'=>'string'),
32 'gender'=>array('type'=>'string'),
33 'age'=>array('type'=>'integer'),
34 'married'=>array('type'=>'boolean'),
35 'salary'=>array('type'=>'double'),
36 );
37 }
38
39 /* Define rules as usual */
40 public function rules()
41 {
42 return array(
43 array('name,surname,gender,age,married,salary','safe'),
44 array('age','numerical','integerOnly'=>true),
45 array('married','boolean'),
46 array('salary','numerical')
47 );
48 }
49
50 /* Add some custom labels for forms etc. */
51 public function attributeLabels()
52 {
53 return array(
54 'name'=>'First name',
55 'surname'=>'Last name',
56 'salary'=>'Your monthly salary',
57 );
58 }
59 }
Sample usage:
/* GET to http://api.example.com/person/1 and populates a single Person model*/ $person=Person::model()->findById(1); /* GET to http://api.example.com/person and populating Person models */ $persons=Person::model()->findAll(); /* create a resource*/ $person=new Person; $person->name='A name'; $person->age=21; $person->save(); POST request. Returns false if the model doesn't validate /* Updating a resource (sending a PUT request) $person=Person::model()->findById(1); $person->name='Another name'; $person->save(); //PUT request. Returns false if the model doesn't validate //or short version Person::model()->updateById(1,array('name'=>'Another name')); /* DELETE a resource */ $person=Person::model()->findById(1); $person->destroy(); //DELETE to http://api.example.com/person/1 //or short version Person::model()->deleteById(1); //setting attributes $person->attributes=$_POST['Person']; if($person->save()) echo 'yipiie'; //model validated and was saved/updated
Other methods for EActiveResource:
- public function init()
- public function setAttribute($name,$value)
- public function getAttributesToSend($attributes=null)
- protected function beforeSave()
- public function sendRequest($uri,$method,$params,$data)