今回はdrushでPHPスクリプトを実行する方法を紹介します。
drush scrを使う方法
ある程度まとまった長さのスクリプトを実行するときは、スクリプトファイルを書いてからdrush scr
で実行します。
使い方
- スクリプトファイル(phpファイル)を作成してサーバーに設置(設置場所はどこでもいい)
<?php
use Drupal\node\Entity\Node;
echo '更新したいノードのNIDを入力してください。';
$nid = rtrim(fgets(STDIN));
$node = Node::load($nid);
$node->set('field_a', 'hello');
$node->save();
echo 'NID' . $nid . 'のノードの更新が完了しました。' . PHP_EOL;
-
drush scr
を実行
drush scr [スクリプトのパス]
実行場所について
スクリプトの置き場所はどこでも大丈夫ですが、Drupalディレクトリ外でdrush scr
を実行すると名前空間のオートロードが効かなくなる(今回のように名前空間で指定したクラスが読み込めなくなる)ので注意です。
引数の取得方法について
ファイル名の他に追加で引数を指定したいときは$_SERVER['argv'])
で取得できます。
<?php
use Drupal\node\Entity\Node;
// コマンドの引数からNIDを取得.
$nid = $_SERVER['argv'][6];
$node = Node::load($nid);
$node->set('field_a', 'hello');
$node->save();
echo 'NID' . $nid . 'のノードの更新が完了しました。' . PHP_EOL;
この場合のコマンド
drush scr [スクリプトのパス] [NID]
drush phpを使う方法
ほんのちょっと値をチェックしたり変更させたいときはdrush php
の方が便利です。
drush php
// シェルが開く
Psy Shell v0.10.6 (PHP 7.3.24-3+ubuntu18.04.1+deb.sury.org+1 — cli) by Justin Hileman
test (Drupal 9.1.4)
>>> \Drupal\node\Entity\Node::load(4)->set('field_a', 'konnichiwa')->save();
=> 2