私はDrupal 8サイトに取り組んでいます。要件の一部は、クライアントがボタンをクリックして特定のタスクを実行できるページをクライアントに提供することです。これを行うには、コマンドラインからDrushコマンドを実行したが、モジュールから実行したい。
php_exec()
またはdrush_invoke_process()
を使用したコードを見たことがあります。この機能を使用するにはどうすればよいですか?
反対側から始めてください。すべてのDrushコマンドがいくつかのPHPコードを実行することを想像してください。次に、実行するDrushコマンドのコードを確認し、それをボタンの送信関数にリファクタリングします。
すべてのホストにDrushがインストールされているわけではないことを考慮すると、質問で提案されているようにそれを行うことは、あまり持続可能ではないようです。そのため、その機能を環境とは独立して機能させる方がよいでしょう。
考えられる方法の1つが見つかりました: SymfonyのProcess
およびフラグ付きの質問を可能な限り重複して使用するDrupalコンソールコマンド? を使用する方法。そしてdrush_invoke_process()
について、これまでのところそれを理解する方法は、他のDrushコマンド内からのみ呼び出すことができるようです。
次に気になったのは、質問のコメントで、実行しようとしていることを言っていることです/vendor/bin/drush/drush status
これは、マシンのルートにベンダーフォルダがあることを意味します。これはおそらく間違いであり、そのパスを修正する必要があるだけです。