Мой первый контроллер
class MatchesController extends AbstractActionController {
public function checkLogsAction() {
// $logs=new LogsController();
$logs=$this->getServiceLocator()->get('Admin\LogsController');
$logs->writeLogs("log data");
die();
}
Контроллер журналов
class LogsController extends AbstractActionController {
public function writeLogs($logData) {
$this->getServiceLocator()->get('Zend\Log\opta')->info($logData);
return true;
}
global.php
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
'Zend\Log\opta' => function ($sm) {
$fileName=date("Y-m-d");
$log = new Zend\Log\Logger();
$writer = new Zend\Log\Writer\Stream("./data/opta/$fileName");
$log->addWriter($writer);
return $log;
}
),
),
module.php
public function getServiceConfig() {
return array(
"factories"=>array(
'Admin\LogsController' => function ($sm) {
$logsController = new LogsController();
return $logsController;
},
Я получаю эту ошибку: Неустранимая ошибка: вызов функции-члена get () при значении null
Пожалуйста, помогите мне решить решение
$ this-> getServiceLocator () устарел в zf2.5 и удален в zf3. Попробуйте внедрить свои зависимости в контроллер с помощью factory. Если вы ищете систему ведения журнала, обратите внимание на github.com/krytenuk/logger.






Ваш Admin\LogsController расширяет AbstractActionController. Но вы не используете его как AbstractActionController!
AbstractActionController обычно вызывается путем обработки (http) запроса, в результате чего приложение ZF2 направляет запрос на контроллер и выполняет метод действия. Во время этой обработки контроллеру передается экземпляр ServiceLocator / ServiceManager. Это то, чего вам не хватает. Следовательно, вы пытаетесь вызвать метод для нулевого объекта.
Вы не можете просто создать экземпляр ActionController из другого ActionController. (конечно, можно, имея много средств). Если вы используете его таким образом, вы должны убедиться, что новый экземпляр контроллера содержит экземпляр ServiceLocator, запрос, ответ и т. д.
Вы должны учитывать:
а) действительно ли Admin\LogsController является AbstractActionController в вашем приложении? (Я предполагаю, что это не ваш пример кода)
б) вставьте ServiceLocator в свой настраиваемый объект (LogsController) или более чистым способом: вставьте экземпляр регистратора.
Пример:
public function getServiceConfig() {
return array(
'factories' => array(
'Admin\LogsController' => function ($sm) {
$logsController = new LogsController();
$logsController->setServiceLocator($sm); // you have to implement!
return $logsController;
},
);
}
Вы уверены, что используете zf2, а не zf3, потому что $ this-> getServiceLocator () устарела в zf3,