编辑 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'
)
)
)
)
)
),
行动“更新故事”是:
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] 没有这样的文件或目录 ------ -------------------------------------------------- -------------- /Users/gregorychiche/Sites/repos/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php:
我错过了什么?我不明白为什么代码在通过浏览器访问时有效(如果我删除了该代码,但代码显然会引发异常),但在使用终端时却不行。我认为 zf2 正在处理所有依赖项。
提前致谢
编辑 1: getStoriesTable() 如下。在浏览器上下文中使用时效果很好
public function getStoriesTable()
{
if (!$this->storiesTable) {
$sm = $this->getServiceLocator();
$this->storiesTable = $sm->get('Talents\Model\StoriesTable');
}
return $this->storiesTable;
}
编辑 2:自己修复,见评论。
格雷格