【问题标题】:Service "doctrine_mongodb" not found / Symfony / Mongodb找不到服务“doctrine_mongodb”/ Symfony / Mongodb
【发布时间】:2018-08-09 15:33:06
【问题描述】:

我正在尝试使用 MongoDB 在 symfony 中刷新,当我这样做时:

$dm = $this->get('doctrine_mongodb')->getManager();

执行命令时出现此错误:

Service "doctrine_mongodb" not found:即使它存在于应用程序的容器中,但 "AppBundle\Controller\api\MessageUserController" 内的容器是一个较小的服务定位器,只知道 "doctrine"、"form.factory" 、“http_kernel”、“request_stack”、“router”、“security.authorization_checker”、“security.csrf.token_manager”、“security.token_storage”、“session”和“twig”服务。除非您需要额外的懒惰,否则请尝试使用依赖注入。否则,您需要使用“MessageUserController::getSubscribedServices()”声明它。

这是我的 config.yml :

imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }

# Put parameters here that don't need to change on each machine where 
the app is deployed
parameters:
locale: en
image_directory: '%kernel.project_dir%/web/uploads/images'

framework:
#esi: ~
#translator: { fallbacks: ['%locale%'] }
secret: '%secret%'
router:
    resource: '%kernel.project_dir%/app/config/routing.yml'
    strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
#serializer: { enable_annotations: true }
default_locale: '%locale%'
trusted_hosts: ~
session:
    handler_id: session.handler.native_file
    save_path: 
'%kernel.project_dir%/var/sessions/%kernel.environment%'
fragments: ~
http_method_override: true
assets: ~
php_errors:
    log: true

# Twig Configuration
twig:
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
form_themes:
  - 'bootstrap_3_layout.html.twig'

# Doctrine Configuration
doctrine:
dbal:
    driver: pdo_mysql
    host: '%database_host%'
    port: '%database_port%'
    dbname: '%database_name%'
    user: '%database_user%'
    password: '%database_password%'
    charset: UTF8
    # if using pdo_sqlite as your database driver:
    #   1. add the path in parameters.yml
    #     e.g. database_path: 
'%kernel.project_dir%/var/data/data.sqlite'
    #   2. Uncomment database_path in parameters.yml.dist
    #   3. Uncomment next line:
    #path: '%database_path%'

orm:
    auto_generate_proxy_classes: '%kernel.debug%'
    naming_strategy: doctrine.orm.naming_strategy.underscore
    auto_mapping: true

# Swiftmailer Configuration
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
username: '%mailer_user%'
password: '%mailer_password%'
spool: { type: memory }

sensio_framework_extra:
request: { converters: true }

fos_rest:
view:
    formats: { json: true, xml: false, rss: false }
    view_response_listener: true
    mime_types:
        json: ['application/json', 'application/json;version=1.0', 
'application/json;version=2.0']
serializer:
    serialize_null: true
body_converter:
    enabled: true
    validate: true
    validation_errors_argument: violations
#format_listener:
 #   rules:
 #       - { path: 'api/', priorities: ['json'], fallback_format: 
'json' }
exception:
    enabled: true
    codes:
        { AppBundle\Exception\ResourceValidationException: 400 }
    exception_controller: 'fos_rest.exception.controller:showAction'
versioning:
    enabled: true
    resolvers:
        media_type: # Accept header
          enabled: true
          regex: '/(v|version)=(?P<version>[0-9\.]+)/'

lexik_jwt_authentication:
private_key_path: '%jwt_private_key_path%'
public_key_path: '%jwt_public_key_path%'
pass_phrase: '%jwt_key_pass_phrase%'

doctrine_mongodb:
connections:
    default:
        server: "%mongodb_server%"
        options: {}
default_database: Boojon_db
document_managers:
    default:
        auto_mapping: true

我的控制器:

namespace AppBundle\Controller\api;

use AppBundle\Document\MessageUser;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use FOS\RestBundle\Controller\Annotations as Rest;

/**
* @Security("is_anonymous() or is_authenticated()")
* @Route("api")
*/
class MessageUserController extends AbstractController
{
/**
 *
 * @Rest\Post(
 *     path = "/message/user/add",
 *     name = "api_message_add"
 * )
 * @Rest\View(StatusCode=201)
 */
public function UserAddMessageAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();

    $content = ($request->get('content'));
    $user = $em->getRepository('AppBundle:User')->findOneBy(array('id' 
=> ($request->get('id_user'))));
    $token = $request->get('token');
    $friend = $em->getRepository('AppBundle:User')- 
>findOneBy(array('id' => ($request->get('id_friend'))));


    if (!isset($content) ) {
        return new JsonResponse([
            'success' => "false",
            'message' => "Message non renseigné"
        ]);
    }

    if (!isset($token)) {
        return new JsonResponse([
            'success' => "false",
            'message' => "Token non renseigné"
        ]);
    }

    if ($user->getToken() != $token) {
        return new JsonResponse([
            'success' => "false",
            'message' => "Bad token",
        ]);
    }

    if (!isset($friend) or !isset($user)) {
        return new JsonResponse([
            'success' => "false",
            'message' => "Message sans propriétaire ou destinataire"
        ]);
    }

    $message = new MessageUser();
    $message->setRead('0');
    $message->setIdReceiver($friend->getId());
    $message->setIdTransmitter($user->getId());
    $message->setSendAt(new \DateTime('now'));
    $message->setContent($content);

    $dm = $this->get('doctrine_mongodb')->getManager();
    $dm->persist($message);
    $dm->flush();

    return new JsonResponse([
        'success' => "true",
        'message' => "Message ajouté"
    ]);
}
}

感谢所有尝试回答的人:)

【问题讨论】:

    标签: php mongodb symfony


    【解决方案1】:

    AbstractController 是一个更简单的基本控制器,它没有完整的容器支持,您的选择是:

    通过构造函数/方法参数直接注入doctrine_mongodb/manager服务。

    Symfony\Bundle\FrameworkBundle\Controller 扩展而不是Symfony\Bundle\FrameworkBundle\Controller\AbstractController

    【讨论】:

    • 当我使用控制器时,我遇到了这个我不明白的错误:尝试从命名空间“MongoDB\BSON”加载类“ObjectID”。您是否忘记了另一个命名空间的“使用”语句?
    • 你启用了php mongodb扩展吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2017-05-29
    • 1970-01-01
    • 2014-11-07
    • 2019-03-29
    • 2017-12-08
    • 2018-05-16
    相关资源
    最近更新 更多