Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 服务依赖注入不包括manager symfony2_Php_Symfony_Service_Doctrine Orm_Dependency Injection - Fatal编程技术网

Php 服务依赖注入不包括manager symfony2

Php 服务依赖注入不包括manager symfony2,php,symfony,service,doctrine-orm,dependency-injection,Php,Symfony,Service,Doctrine Orm,Dependency Injection,伙计们,我正在尝试在一个表单类型中包含ti,因为某种原因,经理没有在构造函数中包含它可能是一个简单的输入错误,但现在我无法通过symfony2(2.7)的coookbook示例看到错误 这是FormType FloorType namespace George\FloorBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfon

伙计们,我正在尝试在一个表单类型中包含ti,因为某种原因,经理没有在构造函数中包含它可能是一个简单的输入错误,但现在我无法通过symfony2(2.7)的coookbook示例看到错误

这是FormType FloorType

namespace George\FloorBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use George\FloorBundle\Form\DataTransformer\ObjectToNumberTransformer;
use Doctrine\Common\Persistence\ObjectManager;

class FloorType extends AbstractType
{
private $manager;

public function __construct(ObjectManager $manager)
{
    $this->manager = $manager;
}
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder
        ->add('translations', 'a2lix_translations',array(
            'required_locales' => array('bg','en')
        ))
    ->add('object', 'hidden', array(
        // validation message if the data transformer fails
       'invalid_message' => 'That is not a valid issue number',
    ));

    $builder ->get('object')->addModelTransformer(new ObjectToNumberTransformer($this->manager));
}

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'George\FloorBundle\Entity\Floor'
    ));
}

/**
 * @return string
 */
public function getName()
{
    return 'george_floorbundle_floor';
}
}
 <services>
    <service id="app.form.type.floor" class="George\FloorBundle\Form\FloorType">
        <tag name="form.type" alias="george_floorbundle_floor" />
        <argument type="service" id="doctrine.orm.entity_manager"></argument>
    </service>
</services>
需要注入经理的服务

<?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>
    <service id="app.form.type.floor" class="George\FloorBundle\Form\Type\FloorType">
        <tag name="form.type" />
        <argument type="service" id="doctrine.orm.entity_manager"></argument>
    </service>
</services>
因此,当我解除经理职务时:

$manager = $this->getDoctrine()->getManager();
我犯了一个很大的错误:

可捕获的致命错误:传递给George\FloorBundle\Form\FloorType::\uu construct()的参数1必须实现接口原则\Common\Persistence\ObjectManager,未给定,在第171行的D:\work\infinity3\src\George\FloorBundle\Controller\FloorController.php中调用并定义

我的理解是这样的——服务没有设法注入经理

调试本地捆绑包中的服务

namespace George\FloorBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use George\FloorBundle\Form\DataTransformer\ObjectToNumberTransformer;
use Doctrine\Common\Persistence\ObjectManager;

class FloorType extends AbstractType
{
private $manager;

public function __construct(ObjectManager $manager)
{
    $this->manager = $manager;
}
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder
        ->add('translations', 'a2lix_translations',array(
            'required_locales' => array('bg','en')
        ))
    ->add('object', 'hidden', array(
        // validation message if the data transformer fails
       'invalid_message' => 'That is not a valid issue number',
    ));

    $builder ->get('object')->addModelTransformer(new ObjectToNumberTransformer($this->manager));
}

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'George\FloorBundle\Entity\Floor'
    ));
}

/**
 * @return string
 */
public function getName()
{
    return 'george_floorbundle_floor';
}
}
 <services>
    <service id="app.form.type.floor" class="George\FloorBundle\Form\FloorType">
        <tag name="form.type" alias="george_floorbundle_floor" />
        <argument type="service" id="doctrine.orm.entity_manager"></argument>
    </service>
</services>

我已经调试了该服务,并将其列出,但我无法管理它以将经理包括在FloorType中。我在这里错过了什么

编辑

这就是服务xml的问题,由于@Matteo answer,我没有包含别名属性。我编辑了代码,它工作起来很有魅力! 谢谢@Matteo

这是编辑服务

namespace George\FloorBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use George\FloorBundle\Form\DataTransformer\ObjectToNumberTransformer;
use Doctrine\Common\Persistence\ObjectManager;

class FloorType extends AbstractType
{
private $manager;

public function __construct(ObjectManager $manager)
{
    $this->manager = $manager;
}
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder
        ->add('translations', 'a2lix_translations',array(
            'required_locales' => array('bg','en')
        ))
    ->add('object', 'hidden', array(
        // validation message if the data transformer fails
       'invalid_message' => 'That is not a valid issue number',
    ));

    $builder ->get('object')->addModelTransformer(new ObjectToNumberTransformer($this->manager));
}

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'George\FloorBundle\Entity\Floor'
    ));
}

/**
 * @return string
 */
public function getName()
{
    return 'george_floorbundle_floor';
}
}
 <services>
    <service id="app.form.type.floor" class="George\FloorBundle\Form\FloorType">
        <tag name="form.type" alias="george_floorbundle_floor" />
        <argument type="service" id="doctrine.orm.entity_manager"></argument>
    </service>
</services>

您应该在标记部分定义别名,如下所示:

$form = $this->createForm('george_floorbundle_floor', $entity, array(
        'action' => $this->generateUrl('admin_floor_update', array('id' => $entity->getId())),
        'method' => 'PUT',
    ));
service.xml

<services>
    <service id="app.form.type.floor" class="George\FloorBundle\Form\Type\FloorType">
        <tag name="form.type" alias="george_floorbundle_floor" />
        <argument type="service" id="doctrine.orm.entity_manager"></argument>
    </service>
</services>

希望这些帮助

谢谢@Matteo就是这样!