Yii in action

Post on 21-Jun-2015

1,088 views 6 download

Tags:

description

Speak about Yii Extension, Component and Module.

transcript

Y I I KEANY CHU

http://keanychu.com

IN ACTION

KeaNy Chu

fb.com/keanyc

@keany_chu

let’s talk about...

● Module● Component● Extension

<?php echo “Module” ?>

Module

Modules are useful in several scenarios. For a large-scale

application, we may divide it into several modules, each

being developed and maintained separately. Some commonly

used features, such as user management, comment

management, may be developed in terms of modules so that

they can be reused easily in future projects.

Module

A module is a self-contained software unit that consists

of models, views, controllers and other supporting

components. In many aspects, a module resembles to an

application. The main difference is that a module cannot

be deployed alone and it must reside inside of an

application. Users can access the controllers in a module

like they do with normal application controllers.

File Structure

forum/

ForumModule.php the module class file

components/ containing reusable user components

views/ containing view files for widgets

controllers/ containing controller class files

DefaultController.php the default controller class file

extensions/ containing third-party extensions

models/ containing model class files

views/ containing controller view and layout files

layouts/ containing layout view files

default/ containing view files for DefaultController

index.php the index view file

File Structure

forum/

ForumModule.php the module class file

components/ containing reusable user components

views/ containing view files for widgets

controllers/ containing controller class files

DefaultController.php the default controller class file

extensions/ containing third-party extensions

models/ containing model class files

views/ containing controller view and layout files

layouts/ containing layout view files

default/ containing view files for DefaultController

index.php the index view file

File Structure

forum/

ForumModule.php the module class file

components/ containing reusable user components

views/ containing view files for widgets

controllers/ containing controller class files

DefaultController.php the default controller class file

extensions/ containing third-party extensions

models/ containing model class files

views/ containing controller view and layout files

layouts/ containing layout view files

default/ containing view files for DefaultController

index.php the index view file

Generator in Gii

“use the module generator in Gii to create the basic

skeleton of a new module.”

Config

// config/main.php

return array(

......

'modules'=>array('forum',...),

......);

Config

// config/main.php

return array(

......

'modules'=>array(

'forum'=>array(

'postPerPage'=>20,

),

),

......);

Usage

postPerPage=Yii::app()->controller->module->postPerPage;// or the following

if $this refers to the controller instance// $postPerPage=$this->module-

>postPerPage;

<?php echo “Component” ?>

Component

Yii applications are built upon components which are

objects written to a specification. A component is an

instance of CComponent or its derived class. Using a

component mainly involves accessing its properties and

raising/handling its events. The base class CComponent

specifies how to define properties and events.

Code

class Document extends CComponent{ public $textWidth;}

Code

class Document extends CComponent{ private $_textWidth; public function getTextWidth() { return $this->_textWidth; }}

Usage

$document=new Document(); // we can write and read textWidth$document->textWidth=100;echo $document->textWidth; // we can only read textHeightecho $document->textHeight; // we can only write completed$document->completed=true;

Application Component

To use an application component, we first need to change the application configuration by adding a

new entry to its components property, like the following:

Application Component

return array(

// 'preload'=>array('xyz',...),

'components'=>array(

'xyz'=>array(

'class'=>'ext.xyz.XyzClass',

'property1'=>'value1',

'property2'=>'value2',

),

// other component configurations

),);

<?php echo “Extensions” ?>

Extensions

Extending Yii is a common activity during development. For example, when

you write a new controller, you extend Yii by inheriting its CController

class; when you write a new widget, you are extending CWidget or an

existing widget class. If the extended code is designed to be reused by

third-party developers, we call it an extension.

Extensions

Using an extension usually involves the following three steps:

1. Download the extension from Yii's extension repository.

2. Unpack the extension under the extensions/xyz subdirectory of

application base directory, where xyz is the name of the extension.

3. Import, configure and use the extension.

Each extension has a name that uniquely identifies it among all extensions.

Given an extension named as xyz, we can always use the path alias ext.xyz

to locate its base directory which contains all files of xyz.

Zii Extensions

Before we start describing the usage of third-party extensions, we would like to introduce the Zii

extension library, which is a set of extensions developed by the Yii developer team and included in

every release.

When using a Zii extension, one must refer to the corresponding class using a path alias in the form

ofzii.path.to.ClassName. Here the root alias zii is predefined by Yii. It refers to the root

directory of the Zii library. For example, to use CGridView, we would use the following code in a view

script when referring to the extension:

Zii Extensions

$this->widget('zii.widgets.grid.CGridView', array(

'dataProvider'=>$dataProvider,));

Widget

Widgets are mainly used in views. Given a widget class XyzClass belonging to the xyz extension,

we can use it in a view as follows:

Usage

// widget that does not need body content

<?php $this->widget('ext.xyz.XyzClass', array(

'property1'=>'value1',

'property2'=>'value2')); ?>

Usage

// widget that can contain body content

<?php $this->beginWidget('ext.xyz.XyzClass', array(

'property1'=>'value1',

'property2'=>'value2')); ?>

...body content of the widget...

<?php $this->endWidget(); ?>

DO NOT REINVENT THE WHEEL

Q&A

KeaNy Chu

http://keanychu.com

keanyc@gmail.com