我正在尝试按照本教程设置Symfony3和MongoDB:Symfony3 Docs
我遵循了所有内容,在Persist Object之后和MongoDb之后我重新加载了我的页面并得到了这个错误:
Error: Call to a member function get() on null
如果我正确理解它意味着get方法无法找到声明的服务?
我的控制器代码:
<?php
namespace Cambio\CambioBundle\Controller;
use Cambio\CambioBundle\Document\Product;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class AuthenticationController extends Controller
{
public function loginAction()
{
$product = new Product();
$product->setName('A Foo Bar');
$product->setPrice('19.99');
$dm = $this->get('doctrine_mongodb')->getManager();
$dm->persist($product);
$dm->flush();
return new Response('Created product id '.$product->getId());
}
}
这是我的config.yml:
# MongoDB Configuration
doctrine_mongodb:
connections:
default:
server: mongodb://localhost:27017
options: {}
default_database: test_database
document_managers:
default:
auto_mapping: true
不确定问题是什么以及如何解决问题。
其他Errol日志:
in src/Cambio/CambioBundle/Controller/AuthenticationController.php at line 18 -
$product->setPrice('19.99');
// $m = $this->container->get('doctrine_mongodb.odm.default_connection');
$dm = $this->container->get('doctrine_mongodb.odm.default_connection')->getManager();
$dm->persist($product);
$dm->flush();
和日志:
CRITICAL - Uncaught PHP Exception Symfony\Component\Debug\Exception\FatalErrorException: "Error: Call to a member function get() on null" at /Users/Tomazi/Dev/SymfMongo/src/Cambio/CambioBundle/Controller/AuthenticationController.php line 18
更多编辑:
好的,所以我之前我的控制器被定义为服务,这个设置一旦我添加了新的控制器并且没有宣布它作为服务每一个神奇的工作:
的routing.yml:
cambio_test:
path: /test
defaults: { _controller: CambioBundle:Default:index }
cambio_homepage:
path: /
defaults: { _controller: cambio.authentication.controller:loginAction }
的services.xml:
<?xml version="1.0" encoding="UTF-8"?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<!-- Controller -->
<service id="cambio.authentication.controller"
class="Cambio\CambioBundle\Controller\AuthenticationController">
</service>
</services>
</container>
并且默认控制器具有相同的代码初始化它知道为什么当控制器作为服务被解除时它不起作用但是当控制器被合理定义为一个时它确实有效...?
答案 0 :(得分:0)
最有可能的是,您使用了错误的服务名称。在linked documentation中,他们正在使用其他内容:
$m = $this->get('doctrine_mongodb.odm.default_connection');