編集 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:自分で修正しました。コメントを参照してください。
グレッグ