yii 基本流程结构

第一部分:MVC模型
1 用户发出了访问 URL http://www.example.com/index.php?r=post/show&id=1 的请求,Web 服务器通过执行入


口脚本 index.php 处
       理此请求。


2 入口脚本创建了一个 应用 实例并执行。


3 应用从一个叫做 request 的 应用组件 中获得了用户请求的详细信息。


4 应用在一个名叫 urlManager 的应用组件的帮助下,决定请求的 控制器 和 动作 。在这个例子中,控制器是 


post,它代表 
     PostController 类;动作是 show ,其实际含义由控制器决定。


5 应用创建了一个所请求控制器的实例以进一步处理用户请求。控制器决定了动作 show 指向控制器类中的一个


名为 actionShow 的方法。然后它创建并持行了与动作关联的过滤器(例如访问控制,基准测试)。如果过滤器


允许,动作将被执行。


6 动作从数据库中读取一个 ID 为 1 的 Post 模型。


7 动作通过 Post 模型渲染一个名为 show 的 视图。


8 视图读取并显示 Post 模型的属性。


9 视图执行一些 小物件。


10 视图的渲染结果被插入一个 布局。


11 动作完成视图渲染并将其呈现给用户。


第二部分:创建模型
>>>model Post tbl_post
在protected/models下创建名为Post.php的文件,关联数据表是tbl_post。
Post.php是AR类
每个 AR 类代表一个数据表(或视图),数据表(或视图)的列在 AR 类中体现为类的属性,一个 AR 实例则表


示表中的一行。
模型继承自CModel
---------------------------
tbl_post


id title content tags status create_timeupdate_time author_id
1 Welcome! This blog system is developed using Yii. It is meant 
yii, blog 2 1230952187 12309521871
2 A Test Post Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
test 2 1230952187 12309521871


===========================================
向tbl_post表中插入一行
-------------------------------
$post=new Post; //Post实例,代表一行
$post->title='sample post'; //赋值
$post->content='post body content';
$post->save();


-------------------------------
创建控制器
>>>crud Post
在protected/controllers下生成PostController.php文件,关联类Post
控制器继承自:CController
工作流程
----------------
1 用户请求访问这个 URL http://www.example.com/blog/index.php?r=post;                                


                                      
2 入口脚本 被Web服务器执行,它创建并实例化了一个 应用 实例来处理此请求;                            


                                      
3 应用创建并执行了 PostController 实例;                                                            


                                      
4 PostController 实例通过调用它的 actionIndex() 方法执行了 index 动作。注意,如果用户没有在URL中指


定执行一个动作,则 
                            index 就是默认的动作;
5 actionIndex() 方法查询数据库,带回最新的日志列表;                                                


                                      
6 actionIndex() 方法使用日志数据渲染 index 视图。                                                   


                                      
-----------------
用户通过链接将数据传给控制器,控制器通过模型来获得数据,通过视图来包含数据。
-----------------
PostController.php
 public function actionCreate()
 {
  $model=new Post;
  if(isset($_POST['Post']))
  {
   $model->attributes=$_POST['Post'];
   if($model->save())
    $this->redirect(array('view','id'=>$model->id));
  }
  $this->render('create',array(
   'model'=>$model,
  ));
 }


CModel定义了魔术getter()和setter():getAttributes(),setAttributes(),用来自动读取,设置attributes


属性的值。
参考: 关于多继承层次的set魔术方法解析
render()加载protected/views/post/create.php视图,传递相应的值。
-------------------
create.php
<?php
$this->breadcrumbs=array(
 'Posts'=>array('index'),
 'Create',
);


$this->menu=array(
 array('label'=>'List Post', 'url'=>array('index')),
 array('label'=>'Manage Post', 'url'=>array('admin')),
);
?>


<h1>Create Post</h1>


<?php echo $this->renderPartial('_form', array('model'=>$model)); ?>


视图的属性是控制器定义的。
=================================================================
第三部分:视图
视图分两部分:布局和内容
-------------------------------------------
布局:protected/views/layouts
控制器载入布局
public $layout='//layouts/column2';


column2.php
<?php $this->beginContent('/layouts/main'); ?>
<div class="container">
 <div class="span-18">
  <div id="content">
   <?php echo $content; ?>
  </div><!-- content -->
 </div>
 <div class="span-6 last">
  <div id="sidebar">
   <?php if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); ?> //如果是guest,不现实菜单
   <?php $this->widget('TagCloud', array(
    'maxTags'=>Yii::app()->params['tagCloudCount'],
   )); ?>


   <?php $this->widget('RecentComments', array(
    'maxComments'=>Yii::app()->params['recentCommentCount'],
   )); ?>
  </div><!-- sidebar -->
 </div>
</div>
<?php $this->endContent(); ?>


-------------------------------------------
内容:protected/views/post/
控制器加载视图,并把数据嵌入视图
 public function actionIndex()
 {
  $dataProvider=new CActiveDataProvider('Post');
  $this->render('index',array(
   'dataProvider'=>$dataProvider,
  ));
 }protected/views/post/index.php
<?php
$this->breadcrumbs=array(       //breadcrumbs
 'Posts',
);
$this->menu=array(                 //菜单项
 array('label'=>'Create Post', 'url'=>array('create')),
 array('label'=>'Manage Post', 'url'=>array('admin')),
);
?>
<h1>Posts</h1>
<?php $this->widget('zii.widgets.CListView', array(
 'dataProvider'=>$dataProvider,   //控制器的数据
 'itemView'=>'_view',             //显示具体项的方式
)); ?>


==============================
widget 
protected/components
放全局的widget,widget是小块内容,显示在边栏,header等,非$content的材料。
-------------------------------
菜单项
protected/components/UserMenu.php
<?php
Yii::import('zii.widgets.CPortlet');
class UserMenu extends CPortlet
{
 public function init()
 {
  $this->title=CHtml::encode(Yii::app()->user->name);
  parent::init();
 }
 protected function renderContent()
 {
  $this->render('userMenu'); //widget使用的样式
 }
}


-------------------------------
widget的样式
protected/components/views/userMenu.php
<ul>
 <li><?php echo CHtml::link('Create New Post',array('post/create')); ?></li>
 <li><?php echo CHtml::link('Manage Posts',array('post/admin')); ?></li>
 <li><?php echo CHtml::link('Approve Comments',array('comment/index')) . ' (' . Comment::model()->pendingCommentCount . ')'; ?></li>
 <li><?php echo CHtml::link('Logout',array('site/logout')); ?></li>
</ul>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值