2

スケルトンから Zend Framework 2 アプリケーションを作成する手順に従いました ( http://framework.zend.com/manual/2.0/en/user-guide/skeleton-application.html )

また、ZF2 ネイティブ コンソール サポートに関する非常に優れたチュートリアルもあります http://framework.zend.com/manual/2.0/en/modules/zend.console.introduction.html

チュートリアルには次のように書かれています。

アプリケーションで次のコマンド ラインを処理するとします。

> zf user resetpassword user@mail.com

ユーザーがこれらのパラメーターを使用してアプリケーション (zf) を実行する場合、Application\IndexController のアクション resetpassword を呼び出したいと考えています。

問題は、CONSOLE (現在は windows ) でスクリプトを実行する方法についての説明がないことです。作成されたフォルダー構造には、zf やその他の実行可能なスクリプトはありません。

ヒントはありますか?

理想的には、各アプリケーション モジュールのエントリ スクリプトを含む、アプリケーション ルート ディレクトリ内の bin フォルダーです。

たとえば、module1 というアプリケーション モジュールを実行します。

php appfolder/bin/module1.php --verbose

また

php appfolder/bin/cli.php module1 --verbose
4

3 に答える 3

5

解決策を見つけました。Web ベースの ZF2 アプリケーションと同様に、エントリ ポイントは appfolder/public の index.php です。

上記のチュートリアルのサンプル アプリは、このように呼び出されます

php.exe public\index.php user resetpassword user@mail.com

zf2 コンソール アプリを呼び出す Linux ラッパー

ZF2 アプリケーション フォルダに変更します

mkdir bin    
touch bin/app
chmod +x bin/app

これをアプリファイルに入れます

#!/bin/sh
PHP_BIN=`which php`
WDIR=`dirname ${0}"`
if test -x "${PHP_BIN}"; then
    cd "${WDIR}"
    "${PHP_BIN}" "../public/index.php" "${@}"
    exit "${?}"
fi
echo "php binary not found, please install php-cli"
exit 1;

これで、この方法でアプリを実行できるはずです

app user resetpassword user@mail.com
于 2012-11-09T14:50:23.443 に答える
1

興味のある方は... Michel Feldheimの回答に基づいて、シンボリックリンクも処理するように少し改善しました。スクリプトは常に正しい場所を見つけるため、どこから実行してもかまいません。ただし、これはbashを使用します」

#!/bin/bash
PHP_BIN=`which php`
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done
scriptDir="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
rootDir="$( cd -P "$( dirname "$scriptDir/../../../../" )" && pwd )"
if test -x "${PHP_BIN}"; then
    cd $rootDir
    "${PHP_BIN}" "public/index.php" "${@}"
    exit "${?}"
fi
echo "php binary not found, please install php-cli"
exit 1;

上記の例では、 $scriptDir は、実行している実際のスクリプトが存在する場所です。また、rootDir はアプリケーションのベース ディレクトリにする必要があります。したがって、アプリケーションが /data/www/someapplication の下にあり、このアプリケーションにファイル名が run の modules/Application/bin フォルダーが含まれていると仮定します。実行中の Linux パス (/) から:

sh /data/www/someapplication/modules/Application/bin/run

ディレクトリを /data/www/someapplication に変更してから、次を実行します。

php public/index.php <your arguments>
于 2013-03-21T15:07:46.367 に答える
-1

ZF1版に同梱されていたコマンドラインツール。おそらくチュートリアルはそれを参照しています。

于 2012-11-09T14:43:19.437 に答える