#php #database #zend-framework2 #console-application
#php #База данных #zend-framework2 #консольное приложение
Вопрос:
Я пытаюсь запустить контроллер с консоли, который будет использоваться для задания cron. Когда я запускаю следующий блок кода в http-контроллере, он работает отлично. Но когда я использую тот же блок кода в консольном контроллере и вызываю его из командной строки, я получаю сообщение об ошибке базы данных:
«Не удалось выполнить инструкцию (3D000 — 1046 — база данных не выбрана»
Я не могу понять, почему он не получает имя базы данных и, возможно, другие параметры из конфигурации local.php . Приветствуется любая подсказка
// CODE BLOCK IN CONTROLLER
$sm = $this->getServiceLocator();
$dbAdapter = $sm->get('MymoduleServiceDb');
$actualDatabaseTableName = 'Operator';
$OperatorTableGateway = new TableGateway($actualDatabaseTableName,$dbAdapter);
$table = new OperatorTable($OperatorTableGateway);
$result = $table->getOperatorList();
var_dump($result->current());
And model class is
namespace MydoduleModel;
use ZendDbTableGatewayTableGateway;
use ZendDbSqlSelect;
class OperatorTable {
protected $tableGateway;
public function __construct(TableGateway $tableGateway) {
$this->tableGateway = $tableGateway;
}
public function getOperatorList() {
$select = new Select('Operator');
$select->columns(array(
'opId'=>'OperatorID',
'ocode'=>'OperatorCode'
));
$resultSet = $this->tableGateway->selectWith($select);
return $resultSet;
}
}
Ответ №1:
Итак, я наконец нашел проблему. Все дело в ценности среды. Запрос HTTPS получал значение EVN из настройки apache. И настройка в application.config.php был ли $env = getenv(‘APP_ENV’) ? : ‘prod’;
и поскольку мой prod.local.php был какой-то пустой, у меня ничего не получалось.
Итак, я узнал, что если вы используете консольное приложение, параметр env value в apache не сработает или, по крайней мере, в моем случае, и вместо этого консоль будет использовать параметр в application.config.php