【发布时间】: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é"
]);
}
}
感谢所有尝试回答的人:)
【问题讨论】: