源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

YiiFramework入门知识点总结(图文教程)

  • 时间:2020-02-05 05:39 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:YiiFramework入门知识点总结(图文教程)
本文总结了YiiFramework入门知识点。分享给大家供大家参考,具体如下: [b]创建Yii应用骨架[/b] web为网站根目录 yiic webapp /web/demo [b]通过GII创建model和CURD时需要注意[/b] 1、Model Generator 操作 即使在有表前缀的情况下,Table Name中也要填写表的全名,即包括表前缀。如下图: [img]http://files.jb51.net/file_images/article/201512/20151228143935287.jpg?20151128143948[/img] 2、Crud Generator 操作 该界面中,Model Class中填写model名称。首字母大写。也可参照在生成model时,在proctected/models目录中通过model generator生成的文件名。如下图: [img]http://files.jb51.net/file_images/article/201512/20151228143954452.jpg?20151128144010[/img] 如果对news、newstype、statustype这三个表生成CURD控制器,则在Model Generator中,在Model Class中输入:News、newsType、StatusType。大小写与创建的文件名的大小写相同。如果写成NEWS或NeWs等都不可以。 [b]创建模块注意事项[/b] 通过GII创建模块,Module ID一般用小写。无论如何,这里填写的ID决定main.php配置文件中的配置。如下:
'modules'=>array(
  'admin'=>array(//这行的admin为Module ID。与创建Module时填写的Module ID大写写一致
    'class'=>'application.modules.admin.AdminModule',//这里的admin在windows os中大小写无所谓,但最好与实际目录一致。
  ),
),

[b]路由[/b] system表示yii框架的framework目录 application表示创建的应用(比如d:\wwwroot\blog)下的protected目录。 application.modules.Admin.AdminModule 表示应用程序目录(比如:d:\wwwroot\blog\protected)目录下的modules目录下的Admin目录下的AdminModules.php文件(实际上指向的是该文件的类的名字) system.db.* 表示YII框架下的framework目录下的db目录下的所有文件。 [b]控制器中的accessRules说明[/b]
/**
 * Specifies the access control rules.
 * This method is used by the 'accessControl' filter.
 * @return array access control rules
 */
public function accessRules()
{
  return array(
    array('allow', // allow all users to perform 'index' and 'view' actions
      'actions'=>array('index','view'),//表示任意用户可访问index、view方法
      'users'=>array('*'),//表示任意用户
    ),
    array('allow', // allow authenticated user to perform 'create' and 'update' actions
      'actions'=>array('create','update'),//表示只有认证用户才可操作create、update方法
      'users'=>array('@'),//表示认证用户
    ),
    array('allow', // allow admin user to perform 'admin' and 'delete' actions
      'actions'=>array('admin','delete'),//表示只有用户admin才能访问admin、delete方法
      'users'=>array('admin'),//表示指定用户,这里指用户:admin
    ),
    array('deny', // deny all users
      'users'=>array('*'),
    ),
  );
}

看以上代码注释。 user: represents the user session information.详情查阅API:CWebUser CWebUser代表一个Web应用程序的持久状态。 CWebUser作为ID为user的一个应用程序组件。因此,在任何地方都能通过[b]Yii::app()->user [/b]访问用户状态
public function beforeSave()
{
  if(parent::beforeSave())
  {
    if($this->isNewRecord)
    {
      $this->password=md5($this->password);
      $this->create_user_id=Yii::app()->user->id;//一开始这样写,User::model()->user->id;(错误)
      //$this->user->id;(错误)
      $this->create_time=date('Y-m-d H:i:s');
    }
    else
    {
      $this->update_user_id=Yii::app()->user->id;
      $this->update_time=date('Y-m-d H:i:s');
    }
    return true;
  }
  else
  {
    return false;
  }
}

[b]getter方法或/和setter方法[/b]
<?php
/**
 * UserIdentity represents the data needed to identity a user.
 * It contains the authentication method that checks if the provided
 * data can identity the user.
 */
class UserIdentity extends CUserIdentity
{
  /**
   * Authenticates a user.
   * The example implementation makes sure if the username and password
   * are both 'demo'.
   * In practical applications, this should be changed to authenticate
   * against some persistent user identity storage (e.g. database).
   * @return boolean whether authentication succeeds.
   */
  private $_id;
  public function authenticate()
  {
    $username=strtolower($this->username);
    $user=User::model()->find('LOWER(username)=?',array($username));
    if($user===null)
    {
      $this->errorCode=self::ERROR_USERNAME_INVALID;
    }
    else
    {
      //if(!User::model()->validatePassword($this->password))
      if(!$user->validatePassword($this->password))
      {
        $this->errorCode=self::ERROR_PASSWORD_INVALID;
      }
      else
      {
        $this->_id=$user->id;
        $this->username=$user->username;
        $this->errorCode=self::ERROR_NONE;
      }
    }
    return $this->errorCode===self::ERROR_NONE;
  }
  public function getId()
  {
    return $this->_id;
  }
}

model/User.php
public function beforeSave()
{
  if(parent::beforeSave())
  {
    if($this->isNewRecord)
    {
      $this->password=md5($this->password);
      $this->create_user_id=Yii::app()->user->id;//====主要为此句。得到登陆帐号的ID
      $this->create_time=date('Y-m-d H:i:s');
    }
    else
    {
      $this->update_user_id=Yii::app()->user->id;
      $this->update_time=date('Y-m-d H:i:s');
    }
    return true;
  }
  else
  {
    return false;
  }
}

更多相关:
/*
由于CComponent是post最顶级父类,所以添加getUrl方法。。。。如下说明:
CComponent 是所有组件类的基类。
CComponent 实现了定义、使用属性和事件的协议。
属性是通过getter方法或/和setter方法定义。访问属性就像访问普通的对象变量。读取或写入属性将调用应相的getter或setter方法
例如:
$a=$component->text;   // equivalent to $a=$component->getText();
$component->text='abc'; // equivalent to $component->setText('abc');
getter和setter方法的格式如下
// getter, defines a readable property 'text'
public function getText() { ... }
// setter, defines a writable property 'text' with $value to be set to the property
public function setText($value) { ... }
*/
public function getUrl()
{
  return Yii::app()->createUrl('post/view',array(
    'id'=>$this->id,
    'title'=>$this->title,
  ));
}

[b]模型中的rules方法[/b]
/*
 * rules方法:指定对模型属性的验证规则
 * 模型实例调用validate或save方法时逐一执行
 * 验证的必须是用户输入的属性。像id,作者id等通过代码或数据库设定的不用出现在rules中。
 */
/**
 * @return array validation rules for model attributes.
 */
public function rules()
{
  // NOTE: you should only define rules for those attributes that
  // will receive user inputs.
  return array(
  array('news_title, news_content', 'required'),
  array('news_title', 'length', 'max'=>128),
  array('news_content', 'length', 'max'=>8000),
  array('author_name, type_id, status_id,create_time, update_time, create_user_id, update_user_id', 'safe'),
  // The following rule is used by search().
  // Please remove those attributes that should not be searched.
  array('id, news_title, news_content, author_name, type_id, status_id, create_time, update_time, create_user_id, update_user_id', 'safe', 'on'=>'search'),
  );
}

说明: 1、验证字段必须为用户输入的属性。不是由用户输入的内容,无需验证。 2、数据库中的操作字段(即使是由系统生成的,比如创建时间,更新时间等字段——在boyLee提供的yii_computer源码中,对系统生成的这些属性没有放在safe中。见下面代码)。[b]对于不是表单提供的数据,只要在rules方法中没有验证的,都要加入到safe中,否则无法写入数据库[/b]。 yii_computer的News.php模型关于rules方法
/**
 * @return array validation rules for model attributes.
 */
public function rules()
{
  // NOTE: you should only define rules for those attributes that
  // will receive user inputs.
  return array(
    array('news_title, news_content', 'required'),
    array('news_title', 'length', 'max'=>128, 'encoding'=>'utf-8'),
    array('news_content', 'length', 'max'=>8000, 'encoding'=>'utf-8'),
    array('author_name', 'length', 'max'=>10, 'encoding'=>'utf-8'),
    array('status_id, type_id', 'safe'),
    // The following rule is used by search().
    // Please remove those attributes that should not be searched.
    array('id, news_title, news_content, author_name, type_id, status_id', 'safe', 'on'=>'search'),
  );
}

[b]视图中显示动态内容三种方法[/b] 1、直接在视图文件中以PHP代码实现。比如显示当前时间,在视图中:
[url=<?php echo $this->createUrl(] 具体请查找API文档:CController的createUrl()方法 以上两个连接效果等同 组件包含 一个示例: 在视图中底部有如下代码: [img]http://files.jb51.net/file_images/article/201512/20151228144015453.jpg?20151128144035[/img] 打开protected/components下的Notice.php文件,内容如下:
<?php
Yii::import('zii.widgets.CPortlet');
class Banner extends CPortlet
{
  protected function renderContent()
  {
    $this->render('banner');
  }
}

渲染的视图banner,是在protected/components/views目录下。 具体查看API,关键字:[b]CPortlet[/b] 获取当前host
Yii::app()->request->getServerName();
//and
$_SERVER['HTTP_HOST'];
$url = 'http://'.Yii::app()->request->getServerName(); $url .= CController::createUrl('user/activateEmail', array('emailActivationKey'=>$activationKey));
echo $url;

关于在发布新闻时添加ckeditor扩展中遇到的情况
$this->widget('application.extensions.editor.CKkceditor',array(
  "model"=>$model,        # Data-Model
  "attribute"=>'news_content',     # Attribute in the Data-Model
  "height"=>'300px',
  "width"=>'80%',
"filespath"=>Yii::app()->basePath."/../up/",
"filesurl"=>Yii::app()->baseUrl."/up/",
 );

echo Yii::app()->basePath 如果项目目录在:d:\wwwroot\blog目录下。则上面的值为d:\wwwroot\blog\protected。注意路径最后没有返斜杠。 echo Yii::app()->baseUrl; 如果项目目录在:d:\wwwroot\blog目录下。则上面的值为/blog。注意路径最后没有返斜杠。 (d:\wwwroot为网站根目录),[b]注意上面两个区别。一个是basePath,一个是baseUrl[/b] 其它(不一定正确) 在一个控制器A对应的A视图中,调用B模型中的方法,采用:B::model()->B模型中的方法名(); 前期需要掌握的一些API CHtml 希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部