Как я могу решить непредвиденную ошибку '->' (T_OBJECT_OPERATOR)? - PullRequest
0 голосов
/ 04 сентября 2018

У меня ошибка unexpected '->' (T_OBJECT_OPERATOR), и я не могу ее решить:

 $form = $this->createFormBuilder($item)
  foreach ($classes->fieldMappings as $fieldMapping) {
    ->add($fieldMapping['fieldName'], TextType::class, array('attr' => array('class' => 'form-control')))
  }
  ->add('cancel', ButtonType::class, array('label' => 'Abbrechen','attr' => array('class' => 'cancel form-btn btn btn-default pull-right close_sidebar close_h')))
  ->add('save', SubmitType::class, array('label' => 'Speichern','attr' => array('id' => 'submit-my-beautiful-form','class' => 'form-btn btn btn-info pull-right','style' => 'margin-right:5px')))
  ->getForm();
  $form->handleRequest($request);

Одна идея состояла в том, чтобы изменить эту строку:

$form = ($this->createFormBuilder($item))

Но это не сработало, и я не знаю, что я мог сделать

var_dump($classes) выводит это:

object(Doctrine\ORM\Mapping\ClassMetadata)#2979 (40) {
  ["name"]=>
  string(18) "App\Entity\Members"
  ["namespace"]=>
  string(10) "App\Entity"
  ["rootEntityName"]=>
  string(18) "App\Entity\Members"
  ["customGeneratorDefinition"]=>
  NULL
  ["customRepositoryClassName"]=>
  string(29) "App\Repository\UserRepository"
  ["isMappedSuperclass"]=>
  bool(false)
  ["isEmbeddedClass"]=>
  bool(false)
  ["parentClasses"]=>
  array(0) {
  }
  ["subClasses"]=>
  array(0) {
  }
  ["embeddedClasses"]=>
  array(0) {
  }
  ["namedQueries"]=>
  array(0) {
  }
  ["namedNativeQueries"]=>
  array(0) {
  }
  ["sqlResultSetMappings"]=>
  array(0) {
  }
  ["identifier"]=>
  array(1) {
    [0]=>
    string(2) "id"
  }
  ["inheritanceType"]=>
  int(1)
  ["generatorType"]=>
  int(4)
  ["fieldMappings"]=>
  array(5) {
    ["id"]=>
    array(9) {
      ["fieldName"]=>
      string(2) "id"
      ["type"]=>
      string(7) "integer"
      ["scale"]=>
      int(0)
      ["length"]=>
      NULL
      ["unique"]=>
      bool(false)
      ["nullable"]=>
      bool(false)
      ["precision"]=>
      int(0)
      ["id"]=>
      bool(true)
      ["columnName"]=>
      string(2) "id"
    }
    ["username"]=>
    array(8) {
      ["fieldName"]=>
      string(8) "username"
      ["type"]=>
      string(6) "string"
      ["scale"]=>
      int(0)
      ["length"]=>
      int(25)
      ["unique"]=>
      bool(true)
      ["nullable"]=>
      bool(false)
      ["precision"]=>
      int(0)
      ["columnName"]=>
      string(8) "username"
    }
    ["password"]=>
    array(8) {
      ["fieldName"]=>
      string(8) "password"
      ["type"]=>
      string(6) "string"
      ["scale"]=>
      int(0)
      ["length"]=>
      int(64)
      ["unique"]=>
      bool(false)
      ["nullable"]=>
      bool(false)
      ["precision"]=>
      int(0)
      ["columnName"]=>
      string(8) "password"
    }
    ["email"]=>
    array(8) {
      ["fieldName"]=>
      string(5) "email"
      ["type"]=>
      string(6) "string"
      ["scale"]=>
      int(0)
      ["length"]=>
      int(191)
      ["unique"]=>
      bool(true)
      ["nullable"]=>
      bool(false)
      ["precision"]=>
      int(0)
      ["columnName"]=>
      string(5) "email"
    }
    ["isActive"]=>
    array(8) {
      ["fieldName"]=>
      string(8) "isActive"
      ["type"]=>
      string(7) "boolean"
      ["scale"]=>
      int(0)
      ["length"]=>
      NULL
      ["unique"]=>
      bool(false)
      ["nullable"]=>
      bool(false)
      ["precision"]=>
      int(0)
      ["columnName"]=>
      string(9) "is_active"
    }
  }
  ["fieldNames"]=>
  array(5) {
    ["id"]=>
    string(2) "id"
    ["username"]=>
    string(8) "username"
    ["password"]=>
    string(8) "password"
    ["email"]=>
    string(5) "email"
    ["is_active"]=>
    string(8) "isActive"
  }
  ["columnNames"]=>
  array(5) {
    ["id"]=>
    string(2) "id"
    ["username"]=>
    string(8) "username"
    ["password"]=>
    string(8) "password"
    ["email"]=>
    string(5) "email"
    ["isActive"]=>
    string(9) "is_active"
  }
  ["discriminatorValue"]=>
  NULL
  ["discriminatorMap"]=>
  array(0) {
  }
  ["discriminatorColumn"]=>
  NULL
  ["table"]=>
  array(1) {
    ["name"]=>
    string(7) "members"
  }
  ["lifecycleCallbacks"]=>
  array(0) {
  }
  ["entityListeners"]=>
  array(0) {
  }
  ["associationMappings"]=>
  array(0) {
  }
  ["isIdentifierComposite"]=>
  bool(false)
  ["containsForeignIdentifier"]=>
  bool(false)
  ["idGenerator"]=>
  object(Doctrine\ORM\Id\IdentityGenerator)#3894 (1) {
    ["sequenceName":"Doctrine\ORM\Id\IdentityGenerator":private]=>
    NULL
  }
  ["sequenceGeneratorDefinition"]=>
  NULL
  ["tableGeneratorDefinition"]=>
  NULL
  ["changeTrackingPolicy"]=>
  int(1)
  ["isVersioned"]=>
  NULL
  ["versionField"]=>
  NULL
  ["cache"]=>
  NULL
  ["reflClass"]=>
  object(ReflectionClass)#3910 (1) {
    ["name"]=>
    string(18) "App\Entity\Members"
  }
  ["isReadOnly"]=>
  bool(false)
  ["namingStrategy":protected]=>
  object(Doctrine\ORM\Mapping\UnderscoreNamingStrategy)#2431 (1) {
    ["case":"Doctrine\ORM\Mapping\UnderscoreNamingStrategy":private]=>
    int(0)
  }
  ["reflFields"]=>
  array(5) {
    ["id"]=>
    object(ReflectionProperty)#3911 (2) {
      ["name"]=>
      string(2) "id"
      ["class"]=>
      string(18) "App\Entity\Members"
    }
    ["username"]=>
    object(ReflectionProperty)#3912 (2) {
      ["name"]=>
      string(8) "username"
      ["class"]=>
      string(18) "App\Entity\Members"
    }
    ["password"]=>
    object(ReflectionProperty)#3913 (2) {
      ["name"]=>
      string(8) "password"
      ["class"]=>
      string(18) "App\Entity\Members"
    }
    ["email"]=>
    object(ReflectionProperty)#3914 (2) {
      ["name"]=>
      string(5) "email"
      ["class"]=>
      string(18) "App\Entity\Members"
    }
    ["isActive"]=>
    object(ReflectionProperty)#3915 (2) {
      ["name"]=>
      string(8) "isActive"
      ["class"]=>
      string(18) "App\Entity\Members"
    }
  }
  ["instantiator":"Doctrine\ORM\Mapping\ClassMetadataInfo":private]=>
  object(Doctrine\Instantiator\Instantiator)#2984 (0) {
  }
}

для deceze♦:

У меня есть объект, который создается базой данных mySQL. Поскольку у меня есть 100 различных сущностей (это означает таблицы базы данных) с разными полями, я хочу создать одну функцию, которую я могу использовать в зависимости от их содержимого. Вот чего я пытаюсь достичь:

  $form = $this->createFormBuilder($item)

      ->add('id', TextType::class, array('attr' => array('class' => 'form-control')))
       ->add('username', TextType::class, array('attr' => array('class' => 'form-control')))
       ->add('email', TextType::class, array('attr' => array('class' => 'form-control')))
       ->add('is_active', TextType::class, array('attr' => array('class' => 'form-control')))
       ->add('password', TextType::class, array('attr' => array('class' => 'form-control')))  
     ->getForm();

В зависимости от ввода $slug, я хочу создать поля в конструкторе форм:

$EntityName = 'App\\Entity\\' . ucwords($slug);
$em = $this->getDoctrine()->getManager();
$cmf = $em->getMetadataFactory();
$classes = $cmf->getMetadataFor($EntityName);

Вот почему я хочу получить метаданные из объекта $ classes. Объект предлагает мне поля, которые мне нужны, и с помощью цикла foreach я хочу построить их

1 Ответ

0 голосов
/ 04 сентября 2018

То, что вы пытаетесь, слишком мета. Вы не можете создать исходный код PHP с foreach, который затем будет выполнен как исходный код. Что вы хотите, вероятно, что-то вроде этого:

$form = $this->createFormBuilder($item);

foreach ($classes->fieldMappings as $fieldMapping) {
    $form = $form->add($fieldMapping['fieldName'], TextType::class, array('attr' => array('class' => 'form-control')));
}

$form->add('cancel', ButtonType::class, array('label' => 'Abbrechen','attr' => array('class' => 'cancel form-btn btn btn-default pull-right close_sidebar close_h')))
     ->add('save', SubmitType::class, array('label' => 'Speichern','attr' => array('id' => 'submit-my-beautiful-form','class' => 'form-btn btn btn-info pull-right','style' => 'margin-right:5px')))
     ->getForm();

Это цепочка методов:

$d = $a->foo()->foo()->foo();

Каждый вызов метода возвращает новый объект, для которого вы вызываете другой метод. «Разложившаяся» эквивалентная форма:

$b = $a->foo();
$c = $b->foo();
$d = $c->foo();

Теперь, очевидно, вы можете сделать это и в цикле:

for ($i = 0; $i < 3; $i++) {
    $a = $a->foo();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...