Silex对象无法转换为有效的数组键

Cor*_*don 5 php symfony silex

我正在尝试使用Silex创建一个Web应用程序.对于我的应用程序,我有两个对象:Project()和Credential().项目()一:

protected function buildDomainObject($row)
{
    $credential = new Credential();
    $credential->setIdCred($row['idCred']);
    $credential->setNameCred($row['nameCred']);
    $credential->setToken($row['token']);

    $project = new Project();
    $project->setId($row['id']);
    $project->setName($row['name']);
    $project->setBranch($row['branch']);
    $project->setCredential($credential);
    $project->setComment($row['comment']);
    $project->setAlive($row['alive']);
    $project->setNumberTaskList($row['numberTaskList']);

    return $project;
}
Run Code Online (Sandbox Code Playgroud)

而凭证一:

protected function buildDomainObject($row)
{
    $credential = new Credential();
    $credential->setIdCred($row['idCred']);
    $credential->setNameCred($row['nameCred']);
    $credential->setToken($row['token']);

    return $credential;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,Project()包含值凭据中的Credential().将新的Project()对象传递给FormBuilder时没有问题.

    public function addProjectAction(Request $request, Application $app)
    {
        $credentials = $app['credential_repository']->findAllAsArray();
        $project = new Project();
        $projectForm = $app['form.factory']->create(new ProjectType(), $project, ['credentialChoices' => $credentials]);
        $projectForm->handleRequest($request);
        if ($projectForm->isSubmitted() && $projectForm->isValid()) {
            $app['project_repository']->save($project);
        }

        return $app['twig']->render('projectList_form.html.twig', array(
                'title' => 'New project',
                'legend' => 'New project',
                'projectForm' => $projectForm->createView(),
            )
        );
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试从数据库中获取Project()并将其传递给FormBuilder时,会出现问题.

    $credentials = $app['credential_repository']->findAllAsArray();
    $project = $app['project_repository']->find($id);
    $projectForm = $app['form.factory']->create(new ProjectType(), $project, ['credentialChoices' => $credentials]);
Run Code Online (Sandbox Code Playgroud)

我有以下错误:

"object"类型的值无法转换为有效的数组键.

我认为我的问题来自于Project()对象具有包含Credential()对象的属性.

ooX*_*1sh 1

我能够通过使用 buildForm 方法中的对象属性来重新创建异常。

InvalidArgumentException in ArrayKeyChoiceList.php line 71: The value of type "object" cannot be converted to a valid array key.

您不能将credential属性与choice表单字段一起使用。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('credential', 'choice', array(
            'choices'  => $choices,
            'multiple' => false,
            'expanded' => false 
        ))
        ->add('submit', 'submit')
    ;
}
Run Code Online (Sandbox Code Playgroud)

您可以尝试向 Project() 添加凭证 id 属性。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('credentialId', 'choice', array(
            'choices'  => $choices,
            'multiple' => false,
            'expanded' => false 
        ))
        ->add('submit', 'submit')
    ;
}
Run Code Online (Sandbox Code Playgroud)

或者您可能需要按照此stackoverflow 问题中的说明设置实体字段类型