Dans le précédent didacticiel concis de développement du framework Yii (4), exemple de jeu de devinettes de mots du pendu, plusieurs problèmes ont été omis, l'un est le gestionnaire d'URL du fichier de configuration main.php, l'autre est la classe de base CComponent du contrôleur et le le troisième est la classe d'assistance de définition CHtml utilisée par View. Cet article commence par une introduction à URLManager, la gestion des URL.
return array( ... 'components'=>array( 'urlManager'=>array( 'urlFormat'=>'path', 'rules'=>array( 'game/guess/'=>'game/guess', ), ), ), );
La gestion complète des URL des applications Web comprend deux aspects. Premièrement, lorsqu'un utilisateur demande une URL spécifiée, l'application doit l'analyser en paramètres compréhensibles. Deuxièmement, l'application doit fournir un moyen de créer des URL afin que les URL créées puissent être comprises par l'application. Pour les applications Yii, cela se fait à l'aide de CUrlManager.
Lors de l'utilisation d'une URL au format de chemin, nous pouvons spécifier certaines règles d'URL pour rendre notre URL plus conviviale. Par exemple, nous pouvons générer une URL courte /post/100 au lieu du long /index.php/post/read/id/100. La création et l'analyse d'URL sont effectuées en spécifiant les règles d'URL via CUrlManager.
Pour spécifier des règles d'URL, nous devons définir l'attribut Rules de l'élément d'application urlManager :
array( ...... 'components'=>array( ...... 'urlManager'=>array( 'urlFormat'=>'path', 'rules'=>array( 'pattern1'=>'route1', 'pattern2'=>'route2', 'pattern3'=>'route3', ), ), ), );
Ces règles sont spécifiées sous la forme d'une série de tableaux de paires de formats de route, chaque paire correspondant à une seule règle. Le format de la route doit être une expression régulière valide sans délimiteurs ni modificateurs. C'est la partie des informations de chemin utilisée pour faire correspondre les URL. La route doit également pointer vers un contrôleur de route valide.
Les règles peuvent lier un petit nombre de paramètres GET. Le format général des paramètres est le suivant :
ParamName représente le nom du paramètre GET, et le ParamPattern facultatif représente l'expression régulière qui sera utilisée pour correspondre à la valeur du paramètre GET. Lors de la génération d'une adresse Web (URL), ces jetons de paramètres seront remplacés par les valeurs de paramètres correspondantes ; lors de l'analyse d'une URL, les paramètres GET correspondants seront générés en analysant les résultats.
Nous utilisons quelques exemples pour expliquer le fonctionnement des URL. Supposons que nos règles incluent les trois suivantes :
array( 'posts'=>'post/list', 'post/'=>'post/read', 'post//
En résumé, lorsque vous utilisez createUrl pour générer une URL, les paramètres route et GET transmis à la méthode sont utilisés pour déterminer quelles règles d'URL s'appliquent. Si chaque paramètre de la règle d'association peut être trouvé dans le paramètre GET, il sera transmis à createUrl. Si la règle de routage correspond également au paramètre de route, la règle sera utilisée pour générer l'URL.
Si le paramètre GET passé à createUrl est l'une des règles requises ci-dessus, les autres paramètres apparaîtront dans la chaîne de requête. Par exemple, si nous appelons $this- >createUrl('post/read',array('id'=>100,'year'=>2008)) , nous obtiendrons /index.php/post/100 ? année = 2008. Pour que ces paramètres supplémentaires apparaissent dans les informations de chemin, nous devons ajouter /* à la règle. Ainsi avec la règle post//* , on peut obtenir l'URL /index.php/post/100/year/2008 .
Comme nous l'avons mentionné, d'autres utilisations des règles d'URL consistent à analyser les URL de requête. Bien entendu, il s’agit d’un processus inverse de la génération d’URL. Par exemple, lorsque l'utilisateur demande /index.php/post/100, la deuxième règle de l'exemple ci-dessus sera appliquée pour analyser la route post/read et le tableau de paramètres GET('id'=>100) (disponible via $ _OBTENIR).
La méthode createurl génère une adresse relative. Afin d'obtenir une URL absolue, nous pouvons la préfixer avec yii">
Remarque : L'utilisation de règles d'URL réduira les performances de l'application. En effet, lors de l'analyse de l'URL demandée, [CUrlManager] essaie de utilisez chaque règle pour y correspondre jusqu'à ce qu'une certaine règle puisse être appliquée. Par conséquent, les applications de sites Web à fort trafic doivent minimiser les règles d'URL qu'elles utilisent
Regardez la règle 'game/guess/'=>' dans Hangman. game/guess',
C'est-à-dire que tous les /game/guess/xx similaires sont mappés à game/guess, qui est la méthode actionGuess de GameController, et le paramètre GET est transmis sous la forme g= 'x'. Reportez-vous à chacun. Le lien des lettres
CHtml::linkButton(chr($i),array('submit'=>array ('guess','g'=>chr($i))));
Le lien de la lettre cliqué est /game/guess/?g=x ou /game/guess/x Le framework Yii appelle l'actionGuess de. GameController selon les règles de correspondance de urlManager définies dans la méthode main.php, transmettez le paramètre GET De cette façon, la valeur de ce paramètre est accessible via $_GET['g'] dans actionGuess.
Ce qui précède est la gestion des URL du tutoriel du framework de développement PHP Yii Framework (5), veuillez faire attention au site Web PHP chinois (www.php.cn) pour plus de contenu connexe// check to see if the letter is guessed correctly if(isset($_GET['g'][0]) && ($result=$this->guess($_GET['g'][0]))!==null) $this->render($result ? 'win' : 'lose'); else // the letter is guessed correctly, but not win yet { $guessed=$this->getPageState('guessed',array()); $guessed[$_GET['g'][0]]=true; $this->setPageState('guessed',$guessed,array()); $this->render('guess'); }使用urlManager 也允许自定义规则,或者隐藏 index.php 。
<.>