Maison > Article > développement back-end > Yii Framework Official Guide Series 50 - Sujet spécial : Applications console
L'application console est principalement utilisée pour mettre en œuvre les opérations hors ligne requises pour les applications Web en ligne, telles que la génération de code, la compilation d'index de recherche, l'envoi d'e-mails, etc. . Le framework Yii fournit un cadre pour écrire des applications console de manière orientée objet. Il permet aux applications console d'accéder aux ressources utilisées par les applications Web en ligne (telles que les informations de connexion à la base de données).
Yii peut exécuter chaque tâche de console dans la ligne de commande. La commande console est une classe héritée de CConsoleCommand.
Lorsque nous utilisons l'outil yiic webapp pour créer un squelette d'application Yii initialisé, nous pouvons voir les deux fichiers suivants dans le dossier protégé :
yiic : Ceci est un script exécutable exécuté sous Linux/Unix ;
yiic.bat : Il s'agit d'un script batch exécutable exécuté sous Windows.
Dans la fenêtre de la console , nous pouvons saisir la commande suivante :
cd protected yiic help
Cela affichera une série de commandes de console. Par défaut, ces commandes valides incluent celles fournies par le framework Yii (commandes système) et celles écrites par les développeurs eux-mêmes pour les applications autonomes (commandes utilisateur).
Si vous voulez voir comment utiliser une commande, vous pouvez utiliser :
yiic help <command-name></command-name>
Pour exécuter une commande, vous pouvez utiliser la commande suivante format :
yiic <command-name> [parameters...]</command-name>
La commande de console est enregistrée sous la forme d'un fichier de classe dans un chemin tel que CConsoleApplication::command. Par défaut, elle pointe vers le. dossier protégé/commandes.
Une classe de commande de console doit hériter de CConsoleCommand. Le nom de la classe doit être au format XyzCommand, où Xyz représente le nom de la commande avec la première lettre en majuscule. utilisez le nom de classe SitemapCommand. Les noms de commandes de console sont sensibles à la casse.
Astuce : En configurant CConsoleApplication::command matching, vous pouvez obtenir des commandes nommées sous différentes formes et stockées dans différents dossiers de classe.
Afin de créer une nouvelle commande, vous devez souvent remplacer CConsoleCommand::run() ou développer une ou plusieurs actions de commande.
Lors de l'exécution d'une commande console, la méthode CConsoleCommand::run() sera appelée par l'application console. Tous les paramètres de la console seront également transmis à cette méthode sous la forme du fragment de méthode suivant :
public function run($args) { ... }
où $args Représente les paramètres supplémentaires donnés sur la ligne de commande.
Dans la commande console, nous pouvons utiliser Yii::app() pour accéder à l'instance d'application console. De plus, nous pouvons également accéder à des ressources telles que les connexions à la base de données (par exemple Yii::app()->). ;db ). Vous pouvez voir que cette utilisation est très similaire à celle des applications Web.
Info : A partir de la version 1.1.1, on peut également créer des commandes globales partagées par toutes les applications Yii sur la même machine : définir une variable d'environnement nommée YII_CONSOLE_COMMANDS Pointer vers un existant dossier, puis placez notre classe de commande globale sous ce dossier.
Remarque : Cette fonctionnalité d'action de commande de console est valable à partir de la version 1.1.5.
Une commande de console doit souvent traiter différents paramètres de ligne de commande, certains sont obligatoires et d'autres sont facultatifs. La commande de console doit également fournir des sous-commandes pour gérer différentes sous-tâches. Ces tâches peuvent être simplifiées à l'aide d'actions de commande de console.
Une action de commande de console est une méthode de la classe de commande de console. Le nom de la méthode doit être au format actionXyz, où Xyz représente le nom de l'action avec la première lettre en majuscule. Par exemple, une méthode actionIndex définit une action. action d'index nommée.
Pour effectuer une action spécifique, nous pouvons utiliser le format de ligne de commande suivant :
yiic <command-name> <action-name> --option1=value1 --option2=value2 ...</action-name></command-name>
Des paires option-valeur supplémentaires seront transmises en tant que paramètres nommés dans la méthode d'action . La valeur d'une opération xyz sera transmise à la méthode d'action sous la forme du paramètre $xyz. Par exemple, si nous définissons la classe de commande suivante :
class SitemapCommand extends CConsoleCommand { public function actionIndex($type, $limit=5) { ... } public function actionInit() { ... } }
Ensuite, la commande de console suivante est appelée actionIndex ("News", 5) aura des résultats :
yiic sitemap index --type=News --limit=5 // $limit takes default value yiic sitemap index --type=News // $limit takes default value // because 'index' is a default action, we can omit the action name yiic sitemap --type=News // the order of options does not matter yiic sitemap index --limit=5 --type=News
Si une opération ne spécifie pas de valeur (par exemple --type au lieu de --type=News), la valeur du paramètre d'action correspondant sera Assumée être vrai.
Remarque : ne prend pas en charge le format de paramètre facultatif --type News, -t News.
Une valeur de paramètre peut être un tableau ( Indice de type de tableau requis :
public function actionIndex(array $types) { ... }
Si vous souhaitez utiliser des valeurs de tableau dans les paramètres de ligne de commande , il suffit de répéter simplement la même option :
yiic sitemap index --types=News --types=Article
La commande ci-dessus finira par appeler actionIndex(array('News', 'Article')).
À partir de la version 1.1.6, Yii prend également en charge l'utilisation de paramètres d'action anonymes et d'options globales.
匿名参数表示这些命令行参数不是以选项的形式呈现. 例如, 在命令 yiic sitemap index --limit=5 News中, 我们有一个值为News的匿名参数和命名参数 limit,其值为5。
为了使用匿名参数, 一个命令动作必须声明参数为 $args的形式. 例如,
public function actionIndex($limit=10, $args=array()) {...}
$args数组将会装入所有的匿名参数值.
全局选项代表那些命令行选项可以被一个命令中所有动作共享的选项. 例如, 在一个命令中提供了多个选项, 我们可能想要每一个动作识别一个名为verbose的动作. 当然我们可以在每一个动作方法中声明 $verbose 参数, 一个更好的方式是将其声明为这个命令类的公有成员变量, 将 verbose 转换为全局参数:
class SitemapCommand extends CConsoleCommand { public $verbose=false; public function actionIndex($type) {...} }
上面的代码允许我们执行一个带 verbose 选项的命令:
yiic sitemap index --verbose=1 --type=News
Note: 在控制台命令中退出代码的特性从版本 1.1.11起有效.
通过cronjob或者使用一个持续集成的服务器自动运行控制台命令的时候, 要么命令运行运行成功,要么命令运行失败. 这可以通过检查进程返回的退出代码来查看。
这些退出码是从0-254的整型值(this is the range in php world), 其中 0 表示退出成功其他的所有非0值表示出现了错误.
在一个动作方法或者控制台命令的 run() 方法中你可以在退出时返回整型值退出码 ,例如:
if (/* error */) { return 1; // exit with error code 1 } // ... do something ... return 0; // exit successfully
如果没有返回值, 应用将会退出返回 0.
默认情况下, 如果一个应用是使用yiic webapp工具创建的, 命令行应用的配置将会放在 protected/config/console.php文件中. 和一个Web应用配置文件一样, 这个文件是一个返回控制台应用实例的初始化配置值的数组的PHP脚本。所以CConsoleApplication的任何公有属性都可以在该文件中配置.
因为控制台命令经常被创建来服务于Web应用, 所以需要访问资源(如数据库连接)。我们可以在控制台配置文件中以如下方式来实现 :
return array( ...... 'components'=>array( 'db'=>array( ...... ), ), );
正如我们所看到的那样, 配置的格式和我们在Web应用中的配置类似.这是因为CConsoleApplication和 CWebApplication 的基类相同。
以上就是Yii框架官方指南系列50——专题:控制台应用的内容,更多相关内容请关注PHP中文网(www.php.cn)!