Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung der einführenden Wissenspunkte von YiiFramework

Zusammenfassung der einführenden Wissenspunkte von YiiFramework

不言
不言Original
2018-06-15 11:57:031273Durchsuche

Dieser Artikel stellt hauptsächlich die Wissenspunkte für den Einstieg in YiiFramework vor und analysiert die spezifischen Schritte zur Erstellung von YiiFramework und die damit verbundenen Vorsichtsmaßnahmen in Form von Bildern und Texten.

Dieser Artikel fasst die Einführung von YiiFramework Knowledge Points zusammen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Yii-Anwendungsskelett erstellen

web ist das Stammverzeichnis der Website
yiic webapp / Web/Demo

Sie müssen beim Erstellen von Modellen und CURD über GII aufpassen

1. Modellgeneratorbetrieb

Auch wenn eine Tabelle vorhanden ist Präfix, die Tabelle muss im Tabellennamen ausgefüllt werden. Der vollständige Name, einschließlich des Tabellenpräfixes. Wie unten gezeigt:

2. Crud-Generator-Betrieb

Geben Sie in dieser Schnittstelle den Modellnamen in die Modellklasse ein. Den ersten Buchstaben groß schreiben. Sie können beim Generieren des Modells auch auf den vom Modellgenerator generierten Dateinamen im Verzeichnis proctected/models zurückgreifen. Wie unten gezeigt:

Wenn Sie einen CURD-Controller für die drei Tabellen News, Newstype und Statustype generieren, geben Sie im Modellgenerator Folgendes ein: News, newsType, StatusType. Die Groß-/Kleinschreibung entspricht der des erstellten Dateinamens. Es ist nicht akzeptabel, wenn es als NEWS oder News geschrieben ist.

Hinweise zum Erstellen von Modulen

Beim Erstellen von Modulen über GII wird die Modul-ID im Allgemeinen in Kleinbuchstaben geschrieben. In jedem Fall bestimmt die hier eingetragene ID die Konfiguration in der Konfigurationsdatei main.php. Wie folgt:

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

Route

system stellt das Framework-Verzeichnis des yii-Frameworks dar
application stellt das geschützte Verzeichnis unter der erstellten Anwendung dar (z. B. d:wwwrootblog ).
application.modules.Admin.AdminModule
stellt die Datei AdminModules.php im Admin-Verzeichnis unter dem Modulverzeichnis unter dem Anwendungsverzeichnis dar (zum Beispiel: d:wwwrootblogprotected) (zeigt tatsächlich auf die Klasse des Dateinamens)
system.db.*
repräsentiert alle Dateien im db-Verzeichnis im Framework-Verzeichnis unter dem YII-Framework.

Beschreibung der Zugriffsregeln im 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('*'),
    ),
  );
}

Siehe die obigen Codekommentare.

Benutzer: stellt die Benutzersitzungsinformationen dar. Weitere Informationen finden Sie unter API: CWebUser
CWebUser stellt den dauerhaften Status einer Webanwendung dar.
CWebUser dient als Anwendungskomponente mit der ID-Benutzer. Daher kann auf den Benutzerstatus überall über 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;
  }
}

Getter-Methode oder/und Setter-Methode

<?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 &#39;demo&#39;.
   * 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(&#39;LOWER(username)=?&#39;,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(&#39;Y-m-d H:i:s&#39;);
    }
    else
    {
      $this->update_user_id=Yii::app()->user->id;
      $this->update_time=date(&#39;Y-m-d H:i:s&#39;);
    }
    return true;
  }
  else
  {
    return false;
  }
}

Mehr verwandt:

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

Regelmethode im Modell

/*
 * 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(&#39;news_title, news_content&#39;, &#39;required&#39;),
  array(&#39;news_title&#39;, &#39;length&#39;, &#39;max&#39;=>128),
  array(&#39;news_content&#39;, &#39;length&#39;, &#39;max&#39;=>8000),
  array(&#39;author_name, type_id, status_id,create_time, update_time, create_user_id, update_user_id&#39;, &#39;safe&#39;),
  // The following rule is used by search().
  // Please remove those attributes that should not be searched.
  array(&#39;id, news_title, news_content, author_name, type_id, status_id, create_time, update_time, create_user_id, update_user_id&#39;, &#39;safe&#39;, &#39;on&#39;=>&#39;search&#39;),
  );
}

Anleitung:

1. Das Verifizierungsfeld muss ein vom Benutzer eingegebenes Attribut sein. Inhalte, die nicht vom Benutzer eingegeben wurden, erfordern keine Validierung.

2. Betriebsfelder in der Datenbank (auch wenn sie vom System generiert werden, wie z. B. Erstellungszeit, Aktualisierungszeit und andere Felder) werden diese vom System generierten Attribute nicht in den von boyLee bereitgestellten yii_computer-Quellcode eingefügt sicher. Siehe Code unten).
Für Daten, die nicht vom Formular bereitgestellt werden, müssen sie, solange sie nicht in der Regelmethode überprüft werden, zum Safe hinzugefügt werden, andernfalls können sie nicht in die Datenbank geschrieben werden .

Yii_computers News.php-Modell zur Regelmethode

/**
 * @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(&#39;news_title, news_content&#39;, &#39;required&#39;),
    array(&#39;news_title&#39;, &#39;length&#39;, &#39;max&#39;=>128, &#39;encoding&#39;=>&#39;utf-8&#39;),
    array(&#39;news_content&#39;, &#39;length&#39;, &#39;max&#39;=>8000, &#39;encoding&#39;=>&#39;utf-8&#39;),
    array(&#39;author_name&#39;, &#39;length&#39;, &#39;max&#39;=>10, &#39;encoding&#39;=>&#39;utf-8&#39;),
    array(&#39;status_id, type_id&#39;, &#39;safe&#39;),
    // The following rule is used by search().
    // Please remove those attributes that should not be searched.
    array(&#39;id, news_title, news_content, author_name, type_id, status_id&#39;, &#39;safe&#39;, &#39;on&#39;=>&#39;search&#39;),
  );
}

Drei Möglichkeiten, dynamische Inhalte in der Ansicht anzuzeigen

Direkt in der Ansichtsdatei mit PHP-Code-Implementierung. Um beispielsweise die aktuelle Uhrzeit in der Ansicht anzuzeigen:

<?php echo date("Y-m-d H:i:s");?>

2. Zeigen Sie den Inhalt im Controller an und übergeben Sie ihn über den zweiten Parameter von render an die Ansicht

Die Controller-Methode enthält:

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

Datei anzeigen: Der zweite Parameter der von

<?php echo $time;?>

aufgerufenen render()-Methode ist ein Array (Array-Typ). Die render()-Methode extrahiert die Werte im Array und stellen Sie sie dem Ansichtsskript zur Verfügung. Die Schlüssel im Array sind die Variablennamen, die dem Ansichtsskript bereitgestellt werden. In diesem Beispiel ist der Schlüssel des Arrays time und der Wert $theTime. Der extrahierte Variablenname $time wird vom Ansichtsskript verwendet. Dies ist eine Möglichkeit, Daten vom Controller an die Ansicht zu übergeben.

3. Ansichten und Controller sind sehr enge Brüder, daher bezieht sich $this in der Ansichtsdatei auf den Controller, der diese Ansicht rendert. Ändern Sie das vorherige Beispiel und definieren Sie eine öffentliche Eigenschaft der Klasse im Controller anstelle einer lokalen Variablen, deren Wert das aktuelle Datum und die aktuelle Uhrzeit ist. Greifen Sie dann über $this in der Ansicht auf die Eigenschaften dieser Klasse zu.

Benennungskonvention für Ansichten

Die Benennung von Ansichtsdateien sollte mit der ActionID identisch sein. Bedenken Sie jedoch, dass dies nur eine empfohlene Namenskonvention ist. Tatsächlich muss der Name der Ansichtsdatei nicht mit der ActionID identisch sein. Sie müssen lediglich den Dateinamen als ersten Parameter an render() übergeben.

DB-bezogen

$Prerfp = Prerfp::model()->findAll(
  array(
    &#39;limit&#39;=>&#39;5&#39;,
    &#39;order&#39;=>&#39;releasetime desc&#39;
  )
);
$model = Finishrfp::model()->findAll(
  array(
    &#39;select&#39; => &#39;companyname,title,releasetime&#39;,
    &#39;order&#39;=>&#39;releasetime desc&#39;,
    &#39;limit&#39; => 10
  )
);
foreach($model as $val){
  $noticeArr[] = "  在".$val->title."竞标中,".$val->companyname."中标。";
}
$model = Cgnotice::model()->findAll (
  array(
    &#39;select&#39; => &#39;status,content,updatetime&#39;,
    &#39;condition&#39;=> &#39;status = :status &#39;,
    &#39;params&#39; => array(&#39;:status&#39;=>0),
    &#39;order&#39;=>&#39;updatetime desc&#39;,
    &#39;limit&#39; => 10
  )
);
foreach($model as $val){
  $noticeArr[] = $val->content;
}
$user=User::model()->find(&#39;LOWER(username)=?&#39;,array($username));
$noticetype = Dictionary::model()->find(array(
 &#39;condition&#39; => &#39;`type` = "noticetype"&#39;)
);
// 查找postID=10 的那一行
$post=Post::model()->find(&#39;postID=:postID&#39;, array(&#39;:postID&#39;=>10));

Sie können $condition auch verwenden, um komplexere Abfragebedingungen anzugeben. Anstatt eine Zeichenfolge zu verwenden, können wir $condition zu einer Instanz von CDbCriteria machen, wodurch wir Bedingungen angeben können, die nicht auf WHERE beschränkt sind. Beispiel:

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

Beachten Sie, dass bei Verwendung von CDbCriteria als Abfragekriterium der Parameter $params nicht mehr benötigt wird, da er wie oben in CDbCriteria angegeben werden kann.

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

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

其它

1、链接

<span class="tt"><?php echo CHtml::link(Controller::utf8_substr($val->title,0,26),array(&#39;prerfp/details&#39;,&#39;id&#39;=>$val->rfpid),array(&#39;target&#39;=>&#39;_blank&#39;));?></a> </span>

具体查找API文档:CHtml的link()方法

<span class="tt"><a target="_blank"  title="<?php echo $val->title;?>" href="<?php echo $this->createUrl(&#39;prerfp/details&#39;,array(&#39;id&#39;=>$val->rfpid)) ;?>" ><?php echo Controller::utf8_substr($val->title,0,26); ?></a> </span>

具体请查找API文档:CController的createUrl()方法

以上两个连接效果等同

组件包含

一个示例:

在视图中底部有如下代码:

<?php $this->widget ( &#39;Notice&#39; ); ?>

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

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

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

具体查看API,关键字:CPortlet

获取当前host

Yii::app()->request->getServerName();
//and
$_SERVER[&#39;HTTP_HOST&#39;];
$url = &#39;http://&#39;.Yii::app()->request->getServerName(); $url .= CController::createUrl(&#39;user/activateEmail&#39;, array(&#39;emailActivationKey&#39;=>$activationKey));
echo $url;

关于在发布新闻时添加ckeditor扩展中遇到的情况

$this->widget(&#39;application.extensions.editor.CKkceditor&#39;,array(
  "model"=>$model,        # Data-Model
  "attribute"=>&#39;news_content&#39;,     # Attribute in the Data-Model
  "height"=>&#39;300px&#39;,
  "width"=>&#39;80%&#39;,
"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为网站根目录),注意上面两个区别。一个是basePath,一个是baseUrl

其它(不一定正确)

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

前期需要掌握的一些API
CHtml

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于Yii Framework框架获取分类下面的所有子类的方法

Das obige ist der detaillierte Inhalt vonZusammenfassung der einführenden Wissenspunkte von YiiFramework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn