Yii est un framework PHP libre, orienté objet, basé sur des composants et complet. Yii est basé sur un autre framework, PRADO, qui a été écrit en ASP.NET puis porté en PHP. Peu après la mise en place de la nouvelle architecture, le framework PRADO a été rebaptisé Yii. Le nom du cadre est une abréviation du mot "Yes It Is !". Le géniteur de ce cadre est le développeur chinois Qiang Xue.

Yii peut être utilisé pour développer tout type d'application web. En raison de sa base de composants, de son architecture et de sa prise en charge sophistiquée de la mise en cache, le framework convient au développement de projets à grande échelle tels que des portails, des forums, des systèmes de gestion de contenu (CMS), des systèmes de commerce électronique, des services web RESTful, etc.

Yii implémente un modèle d'architecture MVC (Model-View-Controller) à utiliser et facilite l'organisation du code sur la base de ce modèle.

Yii est un framework complet offrant de nombreuses fonctionnalités éprouvées et prêtes à l'emploi : constructeur de requêtes et ActiveRecord pour les bases de données relationnelles et NoSQL, API RESTful, support de la mise en cache à plusieurs niveaux, etc.

Yii est un cadre hautement extensible dans lequel vous pouvez remplacer presque chaque morceau de code et développer des extensions selon les besoins.

Yii fournit Gii, une interface visuelle permettant de générer automatiquement des contrôleurs, des modèles et des vues.

Installation


L'installation et la gestion de Yii 2.0 et de ses différentes extensions se fait à l'aide de Composer, le gestionnaire de paquets PHP. Cependant, vous pouvez également le faire manuellement en téléchargeant et en décompressant le fichier zip.

L'installation par Composer se résume à taper les commandes les plus simples via la console :

composer global requièrent "fxp/composer-asset-plugin:^1.2.0".
compositeur créer-projet --prefer-dist yiisoft/yii2-app-basic project

Exigences du PHP


La version 2.0 de la norme Yii requiert la version 5.4 ou supérieure, alors que la version 1.1 de la norme Yii requiert la version 5.2. Par conséquent, il existe de nombreuses différences au niveau de la langue.

Espaces de noms
Fonctions anonymes
Syntaxe des tableaux courts
Rédaction abrégée des balises php d'ouverture et de fermeture
Les classes et les interfaces SPL.
Fixations statiques tardives.
Date et heure.
Traits.
Extension PHP pour l'internationalisation.

Namespace


Yii 2.0 utilise des espaces de noms, par exemple yii\web\Request. Les noms sont référencés par une structure de répertoire. Par exemple, yii\web\Request indique que le fichier de classe web/Request.php est placé dans ce répertoire.

 

Composants et objets


Yii 2.0 comporte deux classes principales : la classe yii\base\Object et la classe yii\base\Component. La classe objet est une classe de base légère qui définit les propriétés de l'objet par le biais de getters et setters. Une classe de composant prend en charge les événements et les comportements.

 

Configuration des objets


La classe d'objets introduit une manière uniforme de configurer les objets. Tout descendant d'une classe d'objets doit déclarer son constructeur :

classe MyClass extends \yii\base\Object
{
public function __construct($param1, $param2, $config = [])
{
// ... initialisation avant l'application de la configuration

parent::__construct($config) ;
}

Fonction publique init()
{
parent::init() ;

// ... initialisation après l'application de la configuration
}
}
Le dernier paramètre du constructeur doit prendre un tableau de configuration contenant des paires nom-valeur pour initialiser les propriétés à la fin du constructeur. Vous pouvez surcharger la méthode init() pour effectuer le travail d'initialisation qui doit être fait après l'application de la configuration.

De cette façon, vous pouvez créer et configurer de nouveaux objets en utilisant le tableau de configuration :

$object = Yii::createObject([
class" => "MyClass",
propriété1 => 'abc',
propriété2" => "cde",
], [$param1, $param2]) ;

Événements


Dans Yii 2, nous pouvons utiliser n'importe quel nom d'événement en appelant la méthode trigger() pour déclencher un événement :

$event = nouveau \yii\base\Event ;
$component->trigger($eventName, $event) ;
Pour attacher un gestionnaire à l'événement, nous devons utiliser la méthode on() :

$component->on($eventName, $handler) ;
// Pour déconnecter un gestionnaire, utilisez :
// $component->off($eventName, $handler) ;

Alias du chemin


Yii 2.0 vous permet d'utiliser des alias de chemin pour les fichiers/répertoires et les adresses. Les alias de chemin d'accès commencent par le symbole @ pour distinguer les alias des chemins d'accès et des adresses de fichiers et de répertoires normaux. Par exemple, l'alias @yii fait référence au répertoire d'installation de Yii. Les chemins d'alias sont pris en charge dans la plupart des endroits du code de base de Yii.

Par exemple, yii\caching\FileCache::$cachePath peut prendre l'alias de chemin ainsi que le chemin de répertoire normal. L'alias de chemin est également étroitement lié à la classe de noms.

Il est recommandé de définir l'alias de chemin pour chaque espace de nom racine, ce qui permet d'utiliser la classe Yii autoloader sans configuration supplémentaire. Par exemple, puisque @yii fait référence au répertoire d'installation de Yii, la classe yii\web\Request peut se charger automatiquement.

Vues


L'objet yii\web\View représente la partie vues d'un modèle MVC. Si vous voulez accéder aux données du contrôleur ou du widget dans une vue, vous pouvez utiliser $this->context.

Pour effectuer le rendu du modèle, vous devez utiliser $this->render() qui renvoie le résultat du rendu.

echo $this->render('_item', ['item' => $item]) ;
En outre, en tant que principal langage de templates, Yii 2.0 vous permet également d'utiliser des outils de templating populaires tels que Smarty et Twig. Pour utiliser ces modèles, nous devons configurer le composant de vue d'une application en définissant la propriété View::$renderers.

Modèles


Yii 2.0 utilise yii\base\Model comme modèle de base et possède également une nouvelle méthode scenarios() qui permet à l'utilisateur de définir les scénarios pris en charge et de spécifier les scripts pour manipuler les attributs.

fonction publique scenarios()
{
retour [
backend' => ['email', 'role'],
'frontend' => ['email', '!role'],
] ;
}
Cet exemple utilise deux scripts : backend et frontend. Pour le script backend, les attributs email et rôle sont obligatoires et peuvent être assignés en masse. Dans le scénario du frontend, un attribut d'email peut être assigné en masse, alors qu'un rôle ne le peut pas. L'email et le rôle doivent être validés à l'aide de la méthode rules() utilisée pour déclarer les règles de validation.

Contrôleurs


Yii 2.0 utilise yii\web\Controller comme classe de base d'un contrôleur. yii\base\Action est la classe de base d'une classe d'action. Une action dans un contrôleur doit retourner du contenu :

public function actionView($id)
{
$model = \app\models\Post::findOne($id) ;
if ($model) {
return $this->render('view', ['model' => $model]) ;
} else {
lance une nouvelle \yii\web\NotFoundHttpException ;
}
}


Widgets


Yii 2.0 utilise yii\base\Widget comme classe de widget de base. Le widget commence avec les méthodes begin(), and() et widget() comme suit :

utiliser yii\widgets\Menu ;
utilisez yii\widgets\ActiveForm ;

// remarquez que vous avez besoin de "echo" pour afficher le résultat
echo Menu::widget(['items' => $items]) ;

// passer un tableau pour initialiser les propriétés de l'objet
$form = ActiveForm::begin([
options" => ["class" => "form-horizontal"],
fieldConfig" => ['inputOptions' => ['class' => 'input-xlarge']],
]) ;
... champs de formulaire à saisir ici ...
ActiveForm::end() ;


Thèmes


Les thèmes fonctionnent sur la base d'un mécanisme de mappage de chemin qui fait correspondre le chemin du fichier de la vue source à celui du fichier du thème.

Par exemple, si le chemin d'accès d'un thème est ['/web/views' => '/web/themes/basic'], la version du thème pour le fichier de vues /web/views/site/index.php sera /web/themes/basic/site/index.php. C'est pourquoi les thèmes peuvent être appliqués à n'importe quel fichier de vue, même en dehors du contexte d'un contrôleur ou d'un widget.

Applications de la console
Les applications en console sont organisées comme des contrôleurs, tout comme les applications Web. Les contrôleurs de console doivent être yii\console\Controller. Pour exécuter une commande en console, utilisez <route> où <route> désigne la route du contrôleur (par exemple, sitemap/index). Les arguments anonymes supplémentaires sont transmis en tant que paramètres à la méthode d'action du contrôleur correspondant, tandis que les arguments nommés sont traités comme déclaré dans yii\console\Controller::options().

I18N
La traduction des messages est effectuée par la composante applicative i18n. Ce composant gère un ensemble de sources de messages, ce qui permet d'avoir différentes sources de messages en fonction des catégories de messages.

Filtres d'action

 

Les actions de filtrage sont mises en œuvre en utilisant le comportement. Un nouveau filtre en ligne est défini avec yii\base\ActionFilter. Pour utiliser un filtre, attachez une classe de filtre à un contrôleur en tant que comportement. Par exemple, pour utiliser un filtre yii\filters\AccessControl, vous devez

fonction publique behaviors()
{
retour [
accès" => [
class' => 'yii\filters\AccessControl',
rules' => [
['allow' => true, 'actions' => ['admin'], 'roles' => ['@']],
],
],
] ;
}


Actifs


Représente une collection de paquets d'actifs (par exemple, des fichiers JavaScript, des fichiers CSS, des fichiers image, etc.) dans un répertoire. Chaque lot d'actifs est représenté sous la forme d'une classe prolongeant la classe yii\web\AssetBundle. Il enregistre un regroupement d'actifs avec yii\web\AssetBundle::register().

aide


La version 2.0 de Yii utilise des classes d'aide statiques, telles que

yii\helpers\Html
yii\helpers\ArrayHelper
yii\helpers\StringHelper
yiihelpers\FileHelper
yiihelpers\\Json


Formulaires


Dans Yii 2.0, les formulaires sont créés par yii\widgets\ActiveForm. Un champ est un conteneur constitué d'une étiquette, d'une entrée, d'un message d'erreur ou d'un texte d'indication. Un champ est représenté par un objet ActiveField. L'utilisation de champs vous aidera à créer un formulaire plus propre :

<?php $form = yii\widgets\ActiveForm::begin() ; ?>
<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group">
<?= Html::submitButton('Login') ?>
</div>
<?php yii\widgets\ActiveForm::end() ; ?>


Constructeur de requêtes


Yii 2.0 introduit une requête de base de données en termes d'objet de requête qui peut être transformé en une instruction SQL à l'aide de QueryBuilder. Par exemple :

$query = new \yii\db\Query() ;
$query->select('id, name')
->from('user')
->limit(10) ;

$command = $query->createCommand() ;
$sql = $command->sql ;
$rows = $command->queryAll() ;
Dossier actif
Yii 2.0 apporte de nombreux changements à Active Record. Les deux plus évidentes sont liées au générateur de requêtes et au traitement des requêtes relationnelles. Le générateur de requêtes est utilisé avec la classe yii\db\Query, qui hérite de toutes les méthodes de construction de requêtes.

 

Avantages et inconvénients


Les avantages :
- Pour les développeurs, un grand avantage du framework est une bonne documentation, de nombreux articles avec des exemples de code et une communauté.
- Yii n'est pas l'œuvre d'un seul homme, le cadre est soutenu par une solide équipe de développement et une grande communauté de professionnels qui contribuent continuellement au développement de Yii.
- Yii facilite le prototypage rapide d'applications web. Il s'agit de l'un des outils de développement RAID.
- Il dispose d'un mécanisme intégré pour la création de widgets, par exemple pour placer différents blocs tels que les derniers articles, les catégories, la navigation, les blocs publicitaires, etc. sur un site Web.
- Le composant applicatif i18n permet la traduction automatique des messages des applications web.
- Prise en charge intégrée de la validation automatique des formulaires et de la sortie des messages d'erreur sur la base des données des modèles d'applications Web.
- Mécanisme d'enregistrement actif pour le traitement des requêtes dans les bases de données relationnelles.
- De nombreuses extensions prêtes à l'emploi sur Github et leur installation via Composer
- Widgets intégrés pour l'affichage des données : DetailView (lignes dans un tableau), ListView, GridView (tableaux).
- Mécanismes intégrés d'authentification, d'autorisation et d'enregistrement des utilisateurs.
- Panneau de débogage intégré et très pratique.


Cons :
- Faible écosystème autour du cadre parmi le segment des développeurs anglophones. La communauté est trop dispersée : quelques forums peu actifs, stackoverflow, etc.
- Si le framework vous permet de simplifier le code, il est loin d'être élégant. Si l'on compare sa syntaxe à celle du framework Laravel, elle est inférieure.
- Yii est en retard sur le langage, les normes et les autres cadres. Les nouvelles mises à jour avec des fonctionnalités vraiment utiles ne sortent pas si souvent.
- Les parties backend et frontend de Yii2 sont trop étroitement couplées. Le framework propose la bibliothèque jQuery et Bootstrap, qui sont intégrés par défaut au noyau du framework. Il est prévu de corriger cet inconvénient dans la nouvelle version du - - cadre Yii 3 en rendant ses composants moins liés.
- Le système de routage n'est pas très flexible : il n'y a pas de possibilité de regrouper les routeurs.