yii 2.0 a été publié en version bêta en avril dernier et l'objectif d'une première version stable a été fixé pour le milieu de 2014. . Les progrès vers le jalon 2.0RC étaient à 99%. Je suppose que l'équipe est proche, mais nous devrons probablement attendre un peu plus longtemps. Pendant que nous attendons tous, jetons un coup d'œil à ce à quoi nous pouvons nous attendre en regardant un exemple déjà disponible.
La première version de YII est devenue populaire assez rapidement après sa sortie en 2008. C'est le fondateur, Qiang Xue, a précédemment travaillé sur le cadre Prado et a utilisé l'expérience et les commentaires de cela pour construire Yii.
yii utilise de nombreuses idées d'autres frameworks, langues et bibliothèques: Prado, Ruby, JQuery, Symfony et Joomla sont tous reconnus comme des sources d'inspiration.
Les premiers engagements pour YII 2.0 remontent à 2011, mais le développement a repris l'année dernière. L'équipe a fait une réécriture dans le but de devenir le cadre PHP de la nouvelle génération de pointe. Il adopte les dernières technologies et fonctionnalités, telles que le compositeur, le PSR, les espaces de noms, les traits, etc.
quelque chose qui mérite d'être mentionné est que, selon la page de téléchargement, la prise en charge de la version 1.1 se terminera le 31 décembre 2015, nous avons donc du temps pour commencer à penser à faire la transition.exigences
Installation
Actuellement, deux exemples d'applications sont disponibles. Il existe un exemple de base contenant quelques pages, une page de contact et une page de connexion. L'exemple avancé ajoute un front et un backend séparé, l'interaction de la base de données, l'inscription et la récupération de mot de passe.
Je vais commencer par l'exemple de base. Si vous avez déjà regardé Yii, vous reconnaîtrez le même Basic webApp que Yii 1.1 est venu avec. Installez l'exemple de base avec Composer en utilisant la commande suivante:
composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic
Vous pouvez ensuite vérifier si votre serveur répond aux exigences en ouvrant http: //localhost/yii2-app-basic/requirements.php. L'application réelle s'exécutera ensuite à partir de http: // localhost / yii2-app-basic / web /.
C'est la première chose importante à remarquer: l'idée est que vous définissez la racine du document de votre application sur le / path / vers / application / web, un peu comme avec Symfony. La disposition du répertoire a un peu changé par rapport à la version 1.1. Si vous regardez attentivement, le changement est logique et améliorera la sécurité de votre application.
Auparavant, tous les composants d'application (modèles, vues, contrôleurs, framework et bibliothèques de fournisseurs) vivraient sous la racine du document dans le dossier protégé. De cette façon, la sécurité dépendait des fichiers .htaccess à respecter, ce qui signifiait que votre application était 100% peu sûre par défaut sur Nginx. Déplacer tous les composants d'application de la racine du document empêche le serveur Web d'envoyer vos composants d'application à un utilisateur.
Vous pourriez vous retrouver à chercher les sources de cadre réelles. Le cadre est un composant qui a été installé à l'aide du compositeur, il résidera donc dans le répertoire Vendoryiisoftyii. Ici, vous en trouverez beaucoup plus, mais pour l'instant, nous allons simplement en laisser ça.
Pour l'instant, modifions la configuration du serveur Web local et définissons la racine du document sur / path / vers / application / web. J'ai ajouté un virtualhost http: //yii2-app-basic.localhost/, mais faites comme vous le jugez bon pour votre propre situation. La configuration par défaut est définie pour masquer le fichier de script dans l'URL. Si vous utilisez Apache, vous devrez ajouter un fichier .htaccess au répertoire Web pour demander à Apache de réécrire, il n'est pas là par défaut.
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
Maintenant que nous avons l'application de base en cours d'exécution, certains félicitations sont en ordre…
merci! Pas de science des fusées jusqu'à présent.
Vous commencerez par la page Démarrer, une page statique sur une page de contact et une page de connexion. La page de contact et le formulaire de connexion ont les mêmes fonctionnalités disponibles qu'auparavant; CAPTCHA CODE, validation du formulaire et deux utilisateurs disponibles pour la connexion. La connexion fait de même qu'auparavant; près de rien. Pourtant, c'est un bon début.
La conception de l'application de base a considérablement changé. Auparavant, vous obtenez une application construite sur le framework CSS Blueprint alors que nous commençons maintenant par Twitter Bootstrap. Amélioration? Il est probablement comparé à Blueprint, mais là encore, Bootstrap est bien plus que Blueprint n'a jamais essayé d'être.
Bootstrap vous donnera toutes sortes de composants d'application et accélérera la création d'une application. Certains pourraient dire en revanche que tous les sites se ressemblent avec Bootstrap (les thèmes ne le réparent que partiellement) et cela rendra également votre site plus grande taille. Quoi qu'il en soit, l'intégration avec YII 2.0 se fait avec l'extension YII2-Bootstrap. Cela facilite l'intégration des composants bootstrap dans vos vues.
Une autre chose que vous remarquerez est la barre de débogage en bas. Il est installé et activé par défaut, tout comme dans Symfony. Il permet un accès rapide à des tas d'informations sur votre configuration, vos demandes et votre journalisation des applications. Il conservera également un historique de demandes avec des informations de débogage.
yii gère les erreurs différentes de PHP normalement. YII convertit toutes les erreurs (mortelles et non mortelles) en exceptions. Ceux-ci sont gérés en rendant une sortie perspicace vous pointant vers le point où vous avez gâché ou votre code a généré un avis. Même les erreurs d'analyse, pour lesquelles YII 1.1 se replierait aux erreurs de base PHP, obtiendrait un aperçu bien rendu de votre code. C'est quelque chose que la plupart d'entre nous apprécieront.
gii est également à nouveau présent et activé par défaut.
gii vous aidera en générant du code pour que vous puissiez commencer, un autre excellent outil pour accélérer votre développement. Il générera des modèles et des contrôleurs pour vous. Le générateur CRUD va aller plus loin et générera un ensemble MVC complet pour toutes les actions. GII générera également du code mieux adapté à l'internationalisation (i18n) en insérant immédiatement la fonction yii :: t () où vous en aurez besoin.
L'application de base est désormais également livrée avec une application de ligne de commande simple sur laquelle vous pouvez construire. YII 1.1 a déjà soutenu cela, mais vous devez obtenir un exemple du wiki.
C'est ce que vous trouverez dans l'application de base. Il existe également un exemple de l'application Advanced disponible. Il a une structure quelque peu différente mais ajoute encore plus de fonctionnalités à votre application hors de la boîte:
Poursuivant le regard sur la version de base, jetons de plus près et plongeons dans le code…
Beaucoup de choses ont changé. Certains changements pourraient vous confondre au début, mais je trouve que la plupart des changements ont du sens et sont faciles à accepter. Voici quelques-uns des changements que j'ai trouvés intéressants, amusants ou déroutants.
l'exigence de PHP 5.4 a rendu certaines modifications possibles; Les balises courtes du tableau sont disponibles. Il est également sûr d'utiliser les balises courtes d'écho dans les vues car cela ne dépend plus des paramètres de configuration.
composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic
un petit changement, mais que vous rencontrerez rapidement; Avant, vous utiliseriez yii :: app () pour accéder à l'instance d'application et à ses composants. Dans YII 2.0, cela est passé d'une fonction statique à une variable statique yii :: $ app.
La fonction traduisale yii :: t () est toujours avec nous. Il demande à YII d'utiliser le composant i18n pour traduire le texte fourni dans la langue actuelle utilisée. Vous pouvez également lui demander de remplacer les variables.
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
Le formatage et le style de l'espace réservé ont été sérieusement retravaillés, ce qui permet de formater plus d'options. Quelques exemples:
<span><span><?php </span></span><span><span>$elements = array(1,2,3,4); //Yii 1.1 </span></span><span><span>$elements = [1,2,3,4]; //Yii 2.0 </span></span><span><span>?></span> </span><span><span><?php echo $someVar; ?></span> //Yii 1.1 </span><span><span><?= $someVar ?></span> //always safe to use in Yii 2.0</span>
En raison de ce formatage d'espace réservé, le DateTimeFormatter a disparu:
<span><span><?php </span></span><span><span>echo `Yii<span>::</span>t('app', 'Hello, {username}!', [ </span></span><span> <span>'username' => $username, </span></span><span><span>]); </span></span><span><span>?></span></span>
Cette fonctionnalité est fournie par la bibliothèque des soins intensifs. La documentation YII appelle la documentation originale pour ceci: «assez cryptique». Je vous mets au défi de le lire et d'essayer de le comprendre… Espérons que la documentation YII comprend une version plus lisible dans le temps.
Avant, AccessControl () serait une fonction de votre contrôleur si vous vouliez utiliser la fonctionnalité de contrôle d'accès YII. Avec YII 2.0, le contrôle d'accès fait partie du comportement des contrôleurs ():
<span><span><?php </span></span><span><span>echo <span>\Yii</span>::t('app', '{n, number} is spelled as {n, spellout}', ['n' => 81]); </span></span><span><span>echo <span>\Yii</span>::t('app', 'You are {n, ordinal} in line, please hold.', ['n' => 3]); //Will echo "You are 3rd in line, please wait.". </span></span><span><span>echo <span>\Yii</span>::t('app', 'There {n, plural, =0{are no cats} =1{is one cat} other{are # cats}}!', array( </span></span><span> <span>'n' => 14, </span></span><span><span>)); </span></span><span><span>?></span></span>
Ceci est presque identique à la façon dont il était dans yii 1.1.
J'ai remarqué que l'exemple de code (pas le framework lui-même!) Il manque de nombreux docblocks et a beaucoup de commentaires @InheritDoc. Ce n'est pas ce que vous attendez d'un exemple, mais je suppose que cela sera corrigé dans le temps.
Le modèle de base (auparavant CModel) n'a pas beaucoup changé. Les scénarios vous permettent désormais de modifier l'application des règles de validation. Vous pouvez modifier ce qui doit être validé en fonction de votre scénario actuel (c'est-à-dire un modèle avec différentes règles lorsqu'il est utilisé à partir d'un front ou d'un backend).
L'Aciverecord dérivé a cependant subi de sérieux changements. La syntaxe de la recherche avec ActiveRecord est devenue plus comme une rédaction de requêtes parce que CDBcriteria a disparu. Il a été remplacé par une facilité de récupération des informations:
<span><span><?php </span></span><span><span>//Previously in Yii 1.1 </span></span><span><span>Yii<span>::</span>app()->dateFormatter->formatDateTime(time(), 'medium', 'medium'); </span></span><span> </span><span><span>//In Yii 2.0 </span></span><span><span>echo <span>\Yii</span>::t('app', 'The date is {0, date, short}', time()); //uses the pre-defined 'short' notation (i18n save) </span></span><span><span>echo <span>\Yii</span>::t('app', 'The date is {0, date, YYYY-MM-dd}', time()); //or define your own notation </span></span><span><span>?></span></span>
La définition des relations a également changé de façon spectaculaire. Prenons par exemple un site avec des blogueurs qui publient des articles sur les utilisateurs commentent. Les définitions de relations pour le tableau des auteurs sont décrites ci-dessous. Je vais commencer par son apparence dans yii 1.1:
composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic
Comme vous pouvez le voir, vous définissez toutes les relations d'un enregistrement actif dans un grand tableau. Dans YII 2.0, vous devrez définir des méthodes Getter qui renvoient un objet ActiveQuery pour toutes ces relations. Vous devez utiliser le mot-clé «à travers» dans une relation pour définir une relation entre une table intermédiaire.
Vous avez maintenant deux options pour définir cela; Normalement, vous utiliseriez la méthode via () dans une fonction de relation. Vous pouvez également définir la relation à l'aide de la méthode viable () si vous n'avez besoin que des données dans le tableau après la table de pivot. Même exemple que ci-dessus mais maintenant pour yii 2.0:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
C'est un exemple assez simple. La définition des relations via les fonctions Getter qui renvoient les objets ActiveQueery en permet beaucoup plus. Vous pouvez, par exemple, ajouter une fonction spécifique qui fait une requête pour les publications qui obtiennent> 50 commentaires en ajoutant un appel WHERE () dans laquier active retourné.
Un ajout intéressant est la possibilité de définir les relations Cross SGBD. Vous pouvez définir des relations entre par exemple MySQL et MongoDB ou Redis et les utiliser dans votre application comme un seul objet.
La principale chose à noter dans les vues est que $ cela ne fait plus référence à l'instance du contrôleur. Dans une vue, $ il s'agit d'une instance de l'objet YiiWebView. Le contrôleur est accessible via $ ce-> contexte.
comme je l'ai déjà dit; PHP 5.4 rend la balise d'écho courte constamment disponible. Cela rend les vues qui consistent en php mixte et en HTML plus lisibles;
<span><span><?php </span></span><span><span>$elements = array(1,2,3,4); //Yii 1.1 </span></span><span><span>$elements = [1,2,3,4]; //Yii 2.0 </span></span><span><span>?></span> </span><span><span><?php echo $someVar; ?></span> //Yii 1.1 </span><span><span><?= $someVar ?></span> //always safe to use in Yii 2.0</span>
Les fonctions render () et renderPartial () ont également changé. Avant, il faisait écho à la sortie rendue automatiquement et vous devez ajouter un paramètre supplémentaire pour obtenir la sortie rendue en tant que chaîne. Yii 2.0 renvoie toujours une chaîne sur render () - comme les appels le rendant plus cohérent avec la façon dont les widgets se comportent.
devriez-vous envisager de mettre à niveau votre application YII 1.1 à YII 2.0 dans le temps?
Bruno Škvorc a récemment écrit sur le code hérité ici sur SitePoint. Il soutient qu'une réécriture qui peut être effectuée en 2 mois devrait être envisagée - en particulier si le logiciel que vous utilisez est critique. Je suis d'accord avec lui et je vous suggère de le considérer si vous vous sentez sérieusement à propos de votre application et que vous souhaitez le maintenir au-delà de la fin de la vie de YII 1.1. Mais comme toujours; Cela dépend de votre situation.
Il existe une page spéciale dédiée à la mise à niveau de YII sur le site Web de YII. Le plus gros problème, pour l'instant, est vos extensions. Si vous comptez sur de nombreuses extensions, vous aurez du mal, car il faudra un certain temps pour que la communauté reprenne (re) la rédaction des extensions de YII 2.0. Si vous êtes un vrai pro, vous pourriez bien sûr jeter un coup d'œil sérieusement aux extensions que vous utilisez et envisager (re) les écrire.
Le manuel de migration a une section sur l'exécution de YII 1.1 et YII 2.0 dans une application. Pour les grands projets, c'est un bon moyen de créer un chemin de migration sûr. Migrez votre code générique vers YII 2.0 et prenez votre temps sur les pièces plus complexes ou remplies d'extension.
passer en revue le guide définitif de YII 2.0 me rend de plus en plus enthousiaste pour commencer avec yii 2.0. Je devais déjà m'empêcher de l'utiliser dans un nouveau projet parce que je ne pouvais pas risquer de problèmes avec le code de pré-production.
La qualité de la documentation pour YII 2.0 s'est améliorée par rapport à YII 1.1. J'ai eu du mal à comprendre des choses quand j'ai commencé avec yii 1.1 il y a quelques années et je pense que la documentation est plus étendue qu'auparavant.
Avez-vous déjà regardé Yii 2.0 ou peut-être même construit quelque chose avec? Veuillez nous dire ce que vous avez rencontré. J'aimerais connaître vos expériences!
YII 2.0 est livrée avec une multitude de nouvelles fonctionnalités et améliorations par rapport à ses prédécesseurs. Il prend désormais en charge l'utilisation d'espaces de noms, ce qui facilite l'organisation de code. Il introduit également un nouveau système de routage plus flexible et puissant. Les classes ActiveRecord ont été repensées pour prendre en charge davantage de types de bases de données, y compris les bases de données NoSQL. Le cadre comprend également un nouveau support de développement d'API RESTful, ce qui facilite la construction d'API. De plus, YII 2.0 a amélioré les fonctionnalités de sécurité, y compris la protection contre la contrefaçon de demande CSRF (demande inter-site).
YII 2.0 a un robuste Soutien de l'internationalisation (I18N). Il vous permet de stocker plusieurs traductions du même message dans différentes langues. Vous pouvez également formater les dates, les nombres et les devises en fonction du lieu. YII 2.0 prend également en charge les formulaires pluriels et la sélection de messages basés sur le contexte.
Le débogueur YII 2.0 est un outil puissant qui vous aide à déboguer vos applications. Il recueille et affiche des informations sur chaque demande faite à votre application, y compris les requêtes SQL exécutées, les données de demande et de réponse et les données de synchronisation des performances. Vous pouvez accéder à ces informations via un panneau au bas des pages de votre application.
YII 2.0 prend en charge l'utilisation d'extensions tiers par tiers , qui peut être installé à l'aide du compositeur Package Manager. Une fois installé, vous pouvez utiliser ces extensions, tout comme les fonctionnalités intégrées de YII. La communauté YII a développé un large éventail d'extensions qui fournissent des fonctionnalités supplémentaires, telles que l'authentification des utilisateurs, la validation du formulaire et l'abstraction de la base de données.
YII 2.0 fournit un puissant outil de migration de la base de données qui vous permet de contrôler les modifications de la base de données. Vous pouvez créer une nouvelle migration à l'aide de la commande YII MigRate / Create. Le script de migration contiendra des méthodes pour appliquer et retourner la migration. Vous pouvez ensuite appliquer la migration à l'aide de la commande yii migrate / up.
yii 2.0 fournit un ensemble d'outils pour vous aider à développer des API reposantes. Il comprend la prise en charge du routage, le traitement de la demande, le formatage de réponse et la gestion des erreurs. Vous pouvez également utiliser la classe ActiveController pour générer rapidement des actions Crud (créer, lire, mettre à jour, supprimer) pour votre API.
YII 2.0 fournit un puissant Système de validation de la forme. Vous pouvez définir des règles de validation pour vos champs de formulaire dans la classe de modèle. Lorsqu'un formulaire est soumis, YII validera automatiquement les données d'entrée par rapport à ces règles et générera des messages d'erreur appropriés.
YII 2.0 fournit un système d'authentification utilisateur flexible . Il prend en charge à la fois l'authentification traditionnelle du nom d'utilisateur / mot de passe et des méthodes plus modernes comme OAuth et OpenID. Vous pouvez également étendre le modèle utilisateur intégré pour ajouter vos propres méthodes d'authentification.
YII 2.0 fournit un système de gestion des erreurs et de journalisation robuste. Il peut attraper et gérer à la fois les erreurs PHP et les exceptions. Les erreurs peuvent être enregistrées dans différents formats et envoyées à différentes destinations, telles que les fichiers, les e-mails et les navigateurs.
yii 2.0 fournit un cadre de test Framework basé sur le phpunit et le sélénium. Il prend en charge les tests unitaires et les tests fonctionnels. Vous pouvez rédiger des cas de test pour tester vos modèles, vues et contrôleurs. Le framework de test fournit également des méthodes pour simuler les entrées des utilisateurs et vérifier la sortie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!