2

編集 2:自分で修正しました。コメントを参照してください。

ターミナル経由で Zf2 アプリにアクセスしようとしています。

アイデアは、cron スクリプトが定期的にアプリを呼び出し、対応するアクションがデータベース内のものを探し、必要に応じて更新するというものです。

ブラウザ経由でコントローラー/アクションにアクセスする場合、すべて問題ありません。

ターミナル経由でアクセスすると、mysql 関連のエラーが発生し、少し迷っています。

警告: PDO::__construct(): [2002] そのようなファイルまたはディレクトリはありません (unix:///var/mysql/mysql.sock 経由で接続しようとしています)

端末からのコマンドは次のとおりです。

php index.php ストーリーの更新

これが私のルートです:

'console' => array(
    'router' => array(
        'routes' => array(
              'updatestories' => array(
                    'options' => array(
                        'route'    => 'stories update',
                        'defaults' => array(
                            'controller' => 'Application\Controller\Index',
                            'action'     => 'updatestories'
                        )
                    )
                )
        )
    )
),

アクション「updatestories」は次のとおりです。

public function updatestoriesAction(){

    $request = $this->getRequest();

    // Make sure that we are running in a console and the user has not tricked our
    // application into running this action from a public web server.
    if (!$request instanceof ConsoleRequest){
        throw new \RuntimeException('You can only use this action from a console!');
    }

    $talents = $this->getStoriesTable()->fetchAll();

    var_dump($talents);

    return "end of script. !\n";
}

そして、ターミナル経由で到達したときにのみ発生するエラーは次のとおりです。

警告: PDO::__construct(): [2002] /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework にそのようなファイルまたはディレクトリはありません (unix:///var/mysql/mysql.sock 経由で接続しようとしています) /library/Zend/Db/Adapter/Driver/Pdo/Connection.php 281 行目 ============================== ====================================== アプリケーションが例外をスローしました! ================================================== =================== Zend\Db\Adapter\Exception\RuntimeException 接続エラー: SQLSTATE[HY000] [2002] No such file or directory ------ -------------------------------------------------- -------------- /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php:

何が欠けていますか?ブラウザ経由でアクセスするときにコードが機能する理由がわかりません(それを削除しても、明らかに例外をスローするコードを削除した場合)が、ターミナルを使用するときはそうではありません。zf2 がすべての依存関係を処理していると思いました。

前もって感謝します

edit 1 : getStoriesTable() は次のとおりです。ブラウザコンテキストで使用すると、非常にうまく機能します

public function getStoriesTable()
{
    if (!$this->storiesTable) {
        $sm = $this->getServiceLocator();
        $this->storiesTable = $sm->get('Talents\Model\StoriesTable');
    }
    return $this->storiesTable;
}

編集 2:自分で修正しました。コメントを参照してください。

グレッグ

4

1 に答える 1