Table of Contents
Summary of YiiFramework introductory knowledge points (picture and text tutorial), yiiframework knowledge points
您可能感兴趣的文章:
Home Backend Development PHP Tutorial Summary of YiiFramework entry knowledge points (graphic tutorial), yiiframework knowledge points_PHP tutorial

Summary of YiiFramework entry knowledge points (graphic tutorial), yiiframework knowledge points_PHP tutorial

Jul 12, 2016 am 09:02 AM
yii getting Started

Summary of YiiFramework introductory knowledge points (picture and text tutorial), yiiframework knowledge points

This article summarizes the introductory knowledge points of YiiFramework. Share it with everyone for your reference, the details are as follows:

Create Yii application skeleton

web is the root directory of the website
yiic webapp /web/demo

You need to pay attention when creating models and CURD through GII

1. Model Generator operation

Even if there is a table prefix, the full name of the table must be filled in Table Name, that is, including the table prefix. As shown below:

2. Crud Generator operation

In this interface, fill in the model name in Model Class. Capitalize first letter. You can also refer to the file name generated by the model generator in the proctected/models directory when generating the model. As shown below:

If you generate a CURD controller for the three tables of news, newstype, and statustype, in the Model Generator, enter: News, newsType, and StatusType in the Model Class. The case is the same as that of the created file name. It is not acceptable if it is written as NEWS or News.

Notes on creating modules

Create a module through GII, and the Module ID is generally in lowercase. In any case, the ID filled in here determines the configuration in the main.php configuration file. As follows:

'modules'=>array(
  'admin'=>array(//这行的admin为Module ID。与创建Module时填写的Module ID大写写一致
    'class'=>'application.modules.admin.AdminModule',//这里的admin在windows os中大小写无所谓,但最好与实际目录一致。
  ),
),

Copy after login

Routing

system represents the framework directory of the yii framework
application represents the protected directory under the created application (such as d:wwwrootblog).
application.modules.Admin.AdminModule
Represents the AdminModules.php file in the Admin directory under the modules directory under the application directory (for example: d:wwwrootblogprotected) (actually pointing to the name of the class of the file)
system.db.*
Represents all files in the db directory in the framework directory under the YII framework.

AccessRules description in controller

/**
 * 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('*'),
    ),
  );
}

Copy after login

See the code comments above.

user: represents the user session information. For details, please refer to API: CWebUser
CWebUser represents the persistent state of a web application.
CWebUser serves as an application component with the ID user. Therefore, user status can be accessed from anywhere via Yii::app()->user

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;
  }
}

Copy after login

getter method or/and setter method

<&#63;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)=&#63;',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;
  }
}

Copy after login

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;
  }
}

Copy after login

More related:

/*
由于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,
  ));
}

Copy after login

The rules method in the model

/*
 * 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'),
  );
}

Copy after login

Description:

1. The verification field must be an attribute entered by the user. Content not entered by the user does not require validation.
2. Operation fields in the database (even if they are generated by the system, such as creation time, update time and other fields - in the yii_computer source code provided by boyLee, these attributes generated by the system are not placed in safe. See the code below). For data that is not provided by the form, as long as it is not verified in the rules method, it must be added to safe, otherwise it cannot be written to the database .

yii_computer’s News.php model about rules method

/**
 * @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'),
  );
}

Copy after login

Three ways to display dynamic content in the view

1. Implement it directly in PHP code in the view file. For example, to display the current time in the view: Copy code The code is as follows:
2. Implement the display content in the controller and pass it to the view through the second parameter of render

The controller method contains:

$theTime=date("Y-m-d H:i:s");
$this->render('helloWorld',array('time'=>$theTime));

Copy after login

View file:
Copy code The code is as follows:
The data in the second parameter of the called render() method is an array (array type). The render() method will extract the values ​​in the array and provide them to the view script. The keys in the array will be provided to the view script. variable name. In this example, the key of the array is time and the value is $theTime. The extracted variable name $time is used by the view script. This is a way to pass data from the controller to the view.

3. Views and controllers are very close brothers, so $this in the view file refers to the controller that renders this view. Modify the previous example and define a public property of the class in the controller instead of a local variable whose value is the current date and time. Then access the properties of this class through $this in the view.

View naming convention

View file name, please be the same as ActionID. But remember, this is just a recommended naming convention. In fact, the view file name does not have to be the same as the ActionID. You only need to pass the file name as the first parameter to render().

DB related

$Prerfp = Prerfp::model()->findAll(
  array(
    'limit'=>'5',
    'order'=>'releasetime desc'
  )
);

Copy after login
$model = Finishrfp::model()->findAll(
  array(
    'select' => 'companyname,title,releasetime',
    'order'=>'releasetime desc',
    'limit' => 10
  )
);
foreach($model as $val){
  $noticeArr[] = "  在".$val->title."竞标中,".$val->companyname."中标。";
}

Copy after login
$model = Cgnotice::model()->findAll (
  array(
    'select' => 'status,content,updatetime',
    'condition'=> 'status = :status ',
    'params' => array(':status'=>0),
    'order'=>'updatetime desc',
    'limit' => 10
  )
);
foreach($model as $val){
  $noticeArr[] = $val->content;
}

Copy after login
$user=User::model()->find('LOWER(username)=&#63;',array($username));

Copy after login
$noticetype = Dictionary::model()->find(array(
 'condition' => '`type` = "noticetype"')
);

Copy after login
// 查找postID=10 的那一行
$post=Post::model()->find('postID=:postID', array(':postID'=>10));

Copy after login

You can also use $condition to specify more complex query conditions. Instead of using a string, we can make $condition an instance of CDbCriteria, which allows us to specify conditions that are not limited to WHERE. For example:

$criteria=new CDbCriteria;
$criteria->select='title'; // 只选择'title' 列
$criteria->condition='postID=:postID';
$criteria->params=array(':postID'=>10);
$post=Post::model()->find($criteria); // $params 不需要了

Copy after login

注意,当使用CDbCriteria 作为查询条件时,$params 参数不再需要了,因为它可以在CDbCriteria 中指定,就像上面那样。

一种替代CDbCriteria 的方法是给find 方法传递一个数组。数组的键和值各自对应标准(criterion)的属性名和值,上面的例子可以重写为如下:

$post=Post::model()->find(array(
 'select'=>'title',
 'condition'=>'postID=:postID',
 'params'=>array(':postID'=>10),
));

Copy after login

其它

1、链接
复制代码 代码如下:<?php echo CHtml::link(Controller::utf8_substr($val->title,0,26),array('prerfp/details','id'=>$val->rfpid),array('target'=>'_blank'));?>

具体查找API文档:CHtml的link()方法
复制代码 代码如下:<?php echo Controller::utf8_substr($val->title,0,26); ?>
具体请查找API文档:CController的createUrl()方法

以上两个连接效果等同

组件包含

一个示例:

在视图中底部有如下代码:
复制代码 代码如下:<?php $this->widget ( 'Notice' ); ?>

打开protected/components下的Notice.php文件,内容如下:

<&#63;php
Yii::import('zii.widgets.CPortlet');
class Banner extends CPortlet
{
  protected function renderContent()
  {
    $this->render('banner');
  }
}

Copy after login

渲染的视图banner,是在protected/components/views目录下。

具体查看API,关键字:CPortlet

获取当前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;

Copy after login

关于在发布新闻时添加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/",
 );

Copy after login

echo Yii::app()->basePath

如果项目目录在:d:\wwwroot\blog目录下。则上面的值为d:\wwwroot\blog\protected。注意路径最后没有返斜杠

echo Yii::app()->baseUrl;

如果项目目录在:d:\wwwroot\blog目录下。则上面的值为/blog。注意路径最后没有返斜杠

(d:\wwwroot为网站根目录),注意上面两个区别。一个是basePath,一个是baseUrl

其它(不一定正确)

在一个控制器A对应的A视图中,调用B模型中的方法,采用:B::model()->B模型中的方法名();

前期需要掌握的一些API
CHtml

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

您可能感兴趣的文章:

  • Yii入门教程之目录结构、入口文件及路由设置
  • Yii入门教程之Yii安装及hello world
  • Yii PHP Framework实用入门教程(详细介绍)
  • Yii查询生成器(Query Builder)用法实例教程
  • Yii实现单用户博客系统文章详情页插入评论表单的方法
  • YII使用url组件美化管理的方法
  • Yii中CGridView实现批量删除的方法
  • Yii快速入门经典教程

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1085877.htmlTechArticleYiiFramework入门知识点总结(图文教程),yiiframework知识点 本文总结了YiiFramework入门知识点。分享给大家供大家参考,具体如下: 创建Yii应用骨...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

A Diffusion Model Tutorial Worth Your Time, from Purdue University A Diffusion Model Tutorial Worth Your Time, from Purdue University Apr 07, 2024 am 09:01 AM

Diffusion can not only imitate better, but also "create". The diffusion model (DiffusionModel) is an image generation model. Compared with the well-known algorithms such as GAN and VAE in the field of AI, the diffusion model takes a different approach. Its main idea is a process of first adding noise to the image and then gradually denoising it. How to denoise and restore the original image is the core part of the algorithm. The final algorithm is able to generate an image from a random noisy image. In recent years, the phenomenal growth of generative AI has enabled many exciting applications in text-to-image generation, video generation, and more. The basic principle behind these generative tools is the concept of diffusion, a special sampling mechanism that overcomes the limitations of previous methods.

Generate PPT with one click! Kimi: Let the 'PPT migrant workers' become popular first Generate PPT with one click! Kimi: Let the 'PPT migrant workers' become popular first Aug 01, 2024 pm 03:28 PM

Kimi: In just one sentence, in just ten seconds, a PPT will be ready. PPT is so annoying! To hold a meeting, you need to have a PPT; to write a weekly report, you need to have a PPT; to make an investment, you need to show a PPT; even when you accuse someone of cheating, you have to send a PPT. College is more like studying a PPT major. You watch PPT in class and do PPT after class. Perhaps, when Dennis Austin invented PPT 37 years ago, he did not expect that one day PPT would become so widespread. Talking about our hard experience of making PPT brings tears to our eyes. "It took three months to make a PPT of more than 20 pages, and I revised it dozens of times. I felt like vomiting when I saw the PPT." "At my peak, I did five PPTs a day, and even my breathing was PPT." If you have an impromptu meeting, you should do it

All CVPR 2024 awards announced! Nearly 10,000 people attended the conference offline, and a Chinese researcher from Google won the best paper award All CVPR 2024 awards announced! Nearly 10,000 people attended the conference offline, and a Chinese researcher from Google won the best paper award Jun 20, 2024 pm 05:43 PM

In the early morning of June 20th, Beijing time, CVPR2024, the top international computer vision conference held in Seattle, officially announced the best paper and other awards. This year, a total of 10 papers won awards, including 2 best papers and 2 best student papers. In addition, there were 2 best paper nominations and 4 best student paper nominations. The top conference in the field of computer vision (CV) is CVPR, which attracts a large number of research institutions and universities every year. According to statistics, a total of 11,532 papers were submitted this year, and 2,719 were accepted, with an acceptance rate of 23.6%. According to Georgia Institute of Technology’s statistical analysis of CVPR2024 data, from the perspective of research topics, the largest number of papers is image and video synthesis and generation (Imageandvideosyn

Five programming software for getting started with learning C language Five programming software for getting started with learning C language Feb 19, 2024 pm 04:51 PM

As a widely used programming language, C language is one of the basic languages ​​that must be learned for those who want to engage in computer programming. However, for beginners, learning a new programming language can be difficult, especially due to the lack of relevant learning tools and teaching materials. In this article, I will introduce five programming software to help beginners get started with C language and help you get started quickly. The first programming software was Code::Blocks. Code::Blocks is a free, open source integrated development environment (IDE) for

PyCharm Community Edition Installation Guide: Quickly master all the steps PyCharm Community Edition Installation Guide: Quickly master all the steps Jan 27, 2024 am 09:10 AM

Quick Start with PyCharm Community Edition: Detailed Installation Tutorial Full Analysis Introduction: PyCharm is a powerful Python integrated development environment (IDE) that provides a comprehensive set of tools to help developers write Python code more efficiently. This article will introduce in detail how to install PyCharm Community Edition and provide specific code examples to help beginners get started quickly. Step 1: Download and install PyCharm Community Edition To use PyCharm, you first need to download it from its official website

A must-read for technical beginners: Analysis of the difficulty levels of C language and Python A must-read for technical beginners: Analysis of the difficulty levels of C language and Python Mar 22, 2024 am 10:21 AM

Title: A must-read for technical beginners: Difficulty analysis of C language and Python, requiring specific code examples In today's digital age, programming technology has become an increasingly important ability. Whether you want to work in fields such as software development, data analysis, artificial intelligence, or just learn programming out of interest, choosing a suitable programming language is the first step. Among many programming languages, C language and Python are two widely used programming languages, each with its own characteristics. This article will analyze the difficulty levels of C language and Python

From bare metal to a large model with 70 billion parameters, here is a tutorial and ready-to-use scripts From bare metal to a large model with 70 billion parameters, here is a tutorial and ready-to-use scripts Jul 24, 2024 pm 08:13 PM

We know that LLM is trained on large-scale computer clusters using massive data. This site has introduced many methods and technologies used to assist and improve the LLM training process. Today, what we want to share is an article that goes deep into the underlying technology and introduces how to turn a bunch of "bare metals" without even an operating system into a computer cluster for training LLM. This article comes from Imbue, an AI startup that strives to achieve general intelligence by understanding how machines think. Of course, turning a bunch of "bare metal" without an operating system into a computer cluster for training LLM is not an easy process, full of exploration and trial and error, but Imbue finally successfully trained an LLM with 70 billion parameters. and in the process accumulate

AI in use | AI created a life vlog of a girl living alone, which received tens of thousands of likes in 3 days AI in use | AI created a life vlog of a girl living alone, which received tens of thousands of likes in 3 days Aug 07, 2024 pm 10:53 PM

Editor of the Machine Power Report: Yang Wen The wave of artificial intelligence represented by large models and AIGC has been quietly changing the way we live and work, but most people still don’t know how to use it. Therefore, we have launched the "AI in Use" column to introduce in detail how to use AI through intuitive, interesting and concise artificial intelligence use cases and stimulate everyone's thinking. We also welcome readers to submit innovative, hands-on use cases. Video link: https://mp.weixin.qq.com/s/2hX_i7li3RqdE4u016yGhQ Recently, the life vlog of a girl living alone became popular on Xiaohongshu. An illustration-style animation, coupled with a few healing words, can be easily picked up in just a few days.

See all articles