mgm娱乐场Yii框架把模板页面与框架整合

thinkphp
是我学这么多框架来最简单的一个框架了,它的资料哪里都是,从网上一搜都是,

上一节成功将Yii框架引入,并生成了要进行的项目文件夹shop。

下面是我在做项目的时候总结出来的一些注意的点:

mgm娱乐场 1

1.thinkphp 结构:

进入protected文件夹,开始html模板的整合之旅;

1).要注意的就是我们在action中定义action class
时要注意:首字母要大写,如TestAction.class.php  这就是一个完美的定义

mgm娱乐场 2

2),有控制器就有视图,在定义视图的时候我们要在TPL中定义,但是我们首先要看你定义的控制器名词,我们在TPL这个文件下面建立一个文件,文件名为控制器的名称,然后就可以定义html,html的名称也是有规定的,html名就是你在控制器中定义的方法名词的名字,这样子控制器就很容易的认识你的视图。

protected文件夹中需要注意controller,models以及views三个文件夹,这正是MVC模式所在,将html模板与Yii
框架整合的关键也在于此。其中controller是控制器,控制器中的文件可以设置class方法,然后class方法访问对应的views中的视图。

2.控制器:thinkphp 的控制器很类似java  Struts2
框架,有控制器和视图那就免不了两者之间显示和传值,

比如controller中有SiteController.php这个控制器:

1) .显示:

 代码如下

$this->display();

<!–?php class SiteController extends Controller {  /**  *
Declares class-based actions.  */  public function actions()  {  return
array(  // captcha action renders the CAPTCHA image displayed on the
contact page  ‘captcha’=–>array(
 ‘class’=>’CCaptchaAction‘,
 ‘backColor’=>0xFFFFFF,
 ),
 // page action renders “static” pages stored under
‘protected/views/site/pages’
 // They can be accessed via: index.php?r=site/page&view=FileName
 ‘page’=>array(
 ‘class’=>’CViewAction’,
 ),
 );
 }
 
/**
 * This is the default ‘index’ action that is invoked
 * when an action is not explicitly
requested by users.
 */
 public function actionIndex()
 {
 // renders the view file ‘protected/views/site/index.php’
 // using the default layout ‘protected/views/layouts/main.php’
 $this->render(‘index’);
 }
 
/**
 * This is the action to handle external exceptions.
 */
 public function actionError()
 {
 if($error=Yii::app()->errorHandler->error)
 {
 if(Yii::app()->request->isAjaxRequest)
 echo $error[‘message’];
 else
 $this->render(‘error’, $error);
 }
 }
 
/**
 * Displays the contact page
 */
 public function actionContact()
 {
 $model=new ContactForm;
 if(isset($_POST[‘ContactForm’]))
 {
 $model->attributes=$_POST[‘ContactForm’];
 if($model->validate())
 {
 $name=’=?UTF-8?B?’.base64_encode($model->name).’?=’;
 $subject=’=?UTF-8?B?’.base64_encode($model->subject).’?=’;
 $headers=”From: $name <{$model->email}> “.
 “Reply-To: {$model->email} “.
 “MIME-Version: 1.0 “.
 “Content-Type: text/plain; charset=UTF-8”;
 
mail(Yii::app()->params[‘adminEmail’],$subject,$model->body,$headers);
 Yii::app()->user->setFlash(‘contact’,’Thank you for contacting
us. We will respond to you as soon as possible.’);
 $this->refresh();
 }
 }
 $this->render(‘contact’,array(‘model’=>$model));
 }
 
/**
 * Displays the login page
 */
 public function actionLogin()
 {
 $model=new LoginForm;
 
// if it is ajax validation request
 if(isset($_POST[‘ajax’]) && $_POST[‘ajax’]===’login-form’)
 {
 echo CActiveForm::validate($model);
 Yii::app()->end();
 }
 
// collect user input data
 if(isset($_POST[‘LoginForm’]))
 {
 $model->attributes=$_POST[‘LoginForm’];
 // validate user input and redirect to the previous page if valid
 if($model->validate() && $model->login())
 $this->redirect(Yii::app()->user->returnUrl);
 }
 // display the login form
 $this->render(‘login’,array(‘model’=>$model));
 }
 
/**
 * Logs out the current user and redirect to homepage.
 */
 public function actionLogout()
 {
 Yii::app()->user->logout();
mgm娱乐场, $this->redirect(Yii::app()->homeUrl);
 }
}

$this->show();

可以看到这个控制器中有很多class方法,默认走的方法是public function
actionIndex(),这个方法中$this->render(‘index’);意为渲染views/site文件夹中index.php这个视图。

2). 控制器传值给页面:

这样就理解了打开首页事出现的内容的来由:

$this->assgin(变量,要传的值可以是数组);

 

$this->变量=要传的值

mgm娱乐场 3

3)  .页面给控制器传值,这个大家都是知道的,通过表单来。

网站从shop/index.php入口文件进入,然后访问默认控制器SiteController.php,该控制器访问默认的方法actionIndex(),然后访问views视图中的index.php,呈现出首页内容。

4).控制器获得页面的数据,

搞清楚了这个,将html模板整合到框架中就比较简单了,首先创建所需的控制器,然后再控制器中定义方法,让这个方法跳转到views视图中对应的模板文件即可。比如像把一个首页模板整合到框架中,先在controller中新建一个控制器IndexCotroller.php(也可以使用默认的
SiteController控制器),并定义方法actionIndex(),让它访问视图VIEWS中的index.php文件,这个
index.php文件正是我们的首页模板。

这个的话,好多,但是和java  ,php 不同的就是php  $_GET   thinkphp
:还可以_post [ ]  这样子书写。  这两种是有区别的,那就是$_post
 是不用判断从页面中的值是不是为空,当使用这种方法得到的时候,我们就可以不用做判断,因为为空的时候,他会默认为0.

IndexCotroller.php:

 

 


 代码如下

<!–?php class IndexController extends Controller{ public function
actionIndex() { // 渲染以下视图 ‘protected/views/index/index.php’
$this—>render(‘index’);
}
 
}
?>

如果是新建的控制器,比如IndexCotroller,就需要在views中创建相应的文件夹,如index(SiteController控制器对应的视图文件夹为site),然后再相应的视图文件夹中建立你的class方法访问的文件即可,如本例的方法actionIndex()对应的$this->render(‘index’);就是访问views/index/index.php,这样就通过controller控制器和
views视图——MV模式将html模板和Yii整合到了一起。

views/index/index.php:

<h1>html 模板成功和Yii框架整合</h1>

整合到一起之后怎么访问整合的这个首页呢?如果直接访问,那会跳转到默认控制器SiteController,而不是我们自己定义的IndexCotroller控制器,这时就需要用路由来访问:

http://localhost/shop/shop/index.php?r=index/index

这个路由中,http://localhost/shop/shop/是网站根目录,index.php就是shop文件夹中的入口文件,r=index表示控制器为IndexCotroller,/index表示IndexCotroller控制器中的index方法,访问结果就是我们达到的效果:

mgm娱乐场 4

当然可以创建别的控制器,比如登陆页面可以创建UserController控制器。对于同一个控制器,如IndexCotroller,可以在IndexCotroller.php中创建多个方法,对应views/index/中不同的页面。访问的时候遵从路由的原则即可:

相关文章