传递给 Symfony\Component\Form\FormRenderer::searchAndRenderBlock() 的参数 3 必须是数组类型,字符串给定,在 C:\Users\ 中调用

Argument 3 passed to Symfony\Component\Form\FormRenderer::searchAndRenderBlock() must be of the type array, string given, called in C:\Users\

我正在努力自定义我的表单。在 SiteType.php 中,我有以下代码:

class SiteType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom', null, ["attr"=>["class"=>"form-control"]])
            ->add('grandeVilleProche', null,["attr"=>["class"=>"form-control"]])
            ->add('villeLaPlusProche', null, ["attr"=>["class"=>"form-control"]])
            ->add('exposition', ChoiceType::class, array(
                'choices' => array(
                    'N' => 'N',
                    'NE ' => 'NE',
                    'E ' => 'E',
                    'SE ' => 'SE',
                    'S ' => 'S',
                    'SW ' => 'SW',
                    'W ' => 'W',
                    'NW ' => 'NW',
                    'toutes ' => 'toutes',
                    
                    
                ),
                // 'choices_as_values' => true, 
                'multiple' => true, 
                'expanded' => true
               
                    ))
            ->add('altitudeAuxPiedsdesVoies', null, ["attr"=>["class"=>"form-control"]])
            ->add('dureeMarcheAproche', null, ["attr"=>["class"=>"form-control"]])
            ->add('profilMarcheApproche', ChoiceType::class,
            array(
                    'choices' => array(
                        'Non connue'=>'Non connue',
                        "en montée facile"=>"en montée facile",
                        "en montée"=>"en montée",
                        "en montée raide" => "en montée raide",
                        "en descente facile"=> "en descente facile",
                        "en descente"=>"en descente",
                        "en descente raide"=>"en descente raide",
                        "sur du plat"=>"sur du plat",
                        "en rappel"=>"en rappel",
                        "par tyrolienne"=>"par tyrolienne", 
                        "en bateau"=>"en bateau",
                        "en montée et descente"=>"en montée et descente", 
                        "en montée et descente facile"=>"en montée et descente facile", 
                        "en montée et descente raide"=>"en montée et descente raide",
                        "en descente et montée"=> "en descente et montée",
                        "en descente et montée facile"=>"en descente et montée facile",
                        "en descente et montée raide"=>"en descente et montée raide",
                        "en télésiège"=>"en télésiège", 
                        "par pont de singe"=>"par pont de singe",
                )))
            ->add('practicabilitePiedsdesVoies', ChoiceType::class,
            array(  
                    'mapped' => false,
                    'choices' => array(
                        'Non connu'=>'Non connu',
                        "confortable"=>"confortable",
                        "correct"=>"correct",
                        "accidenté" => "accidenté",
                        "dangereux"=> "dangereux",
                )))
            ->add('latitude', null, ["attr"=>["class"=>"form-control"]])
            ->add('longitude', null, ["attr"=>["class"=>"form-control"]])
            ->add('nombreFalaise', null, ["attr"=>["class"=>"form-control"]])
            ->add('hauteurMax', null, ["attr"=>["class"=>"form-control"]])
            ->add('typeEscalade', ChoiceType::class, array(
                'choices' => array(
                    'Bloc ' => 'Bloc',
                    'Voies d\'une longueur ' => 'Voies d\'une longueur',
                    'Voies de plusieurs longueurs' => 'Voies de plusieurs longueurs',
                    'Psychobloc ' => 'Psychobloc',
                    'Structure Artificielle d\'Escalade gratuite et libre d\'accès' => 'Structure Artificielle d\'Escalade gratuite et libre d\'accès',
                    ),
                // 'choices_as_values' => true, 
                'multiple' => true, 
                'expanded' => true
                    ))
        
                 
            ->add('typeEquipement', ChoiceType::class, array(
                'choices' => array(
                    'sportif' => 'sportif',
                    'engagé ' => 'engagé',
                    'terrain d\'aventure' => 'terrain d\'aventure',
                    'moulinette' => 'moulinette',
                ),
                // 'choices_as_values' => true, 
                'multiple' => true, 
                'expanded' => true
                    ))
...

在我的 _form.htm.twig 中,我必须遵循以下代码:

<div class="container">
    {{ form_start(form, {'attr':{'novalidate':'novalidate'}}) }}
        {{ form_errors(form.exposition) }}
        {{ form_label(form.nom, null, {'label': 'Nom',
        'label_attr': {'class': 'labbel1'}
        }) }}
        {{ form_widget(form.nom, {'attr': {'class': 'nom'}}) }}
        {{ form_label(form.exposition, null, {'label': 'Exposition',
        'label_attr': {'class': 'labbel2'}
        }) }}
        {{ form_widget(form.exposition, {'attr': {'class': 'expo-checkbox'}}) }}
        {{ form_label(form.typeEscalade, 'Type d\'escalade', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.typeEscalade, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.altitudeAuxPiedsdesVoies, 'Altitude aux pieds des voies', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.altitudeAuxPiedsdesVoies, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.dureeMarcheAproche, 'durée marche d\'aproche', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.dureeMarcheAproche, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.profilMarcheApproche, 'profilMarcheApproche', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.profilMarcheApproche, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.practicabilitePiedsdesVoies, null, 'Practicabilité aux pieds des voies', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.practicabiitePiedsdesVoies, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.latitude, 'latitude', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.latitude, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.longitude, 'longitude', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.longitude, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.nombreFalaise, 'Nombre de falaise', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.nombreFalaise, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.hauteurMax, 'Hauteur Max', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.hauteurMax, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.typeEquipement, 'Type d\'équipement', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.typeEquipement, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.nombredeVoie, 'Nombre de voie', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.nombredeVoie, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.difficulte, 'difficulte', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.difficulte, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.difficulte2, 'difficulte2', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.difficulte2, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.siteInteressantpourGrimpeur, 'Site interessant pour grimpeur', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.siteInteressantpourGrimpeur, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.typeRocher, 'Type de rocher', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.typeRocher, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.profileFalaise, 'Profile de falaise', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.profileFalaise, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.typedePrise, 'Type de prise', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.typedePrise, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.restriction, 'restriction', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.restriction, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.infoSuplementaire, 'Info suplementaire', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.infoSuplementaire, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.siteInternet, 'Site internet', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.siteInternet, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.voieMythique, 'Voie mythique', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.voieMythique, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.nomprenompseudo, 'Nom prenom pseudo', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.nomprenompseudo, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.adresseMail, 'Adresse mail', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.adresseMail, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.meilleurperiode, 'Meilleur période', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.meilleurperiode, {'attr': {'class': 'expo-checkbox2'}}) }}
        {{ form_label(form.site, 'Photos', {'attr': {'class': 'labbel3'}}) }}
        {{ form_widget(form.site, {'attr': {'class': 'expo-checkbox2'}}) }}
        
{#check if the route is site_edit on display images#}
{% if app.request.attributes.get('_route') == 'site_edit' %}
        
    {% for image in site.media %}
        <div>
            <img
            src="{{ asset('/uploads/' ~ image) }}" alt="image" width="350">
            <a href="{{ path('sites_delete_image', {id:site.id}) }}" data-delete data-token="{{csrf_token('delete' ~ site.id )}}">Supprimer</a>
        </div>
    {% endfor %}
{% endif %}
{# {{ form_row(form.save) }} #}
<div>
<button class="btn btn-primary">{{ button_label|default('Save') }}</button>
</div>
{{ form_end(form) }}
    

</div>

我有这个错误:

Argument 3 passed to Symfony\Component\Form\FormRenderer::searchAndRenderBlock() must be of the type array, string given, called in C:\Users\Diego\Dropbox\Mon PC (DESKTOP-HPQ395F)\Desktop\coursSymfony - Copie\ProjetEscalade4-4\var\cache\dev\twig\b9\b9349226432d99fda75ceac3109f9c1a1da36d5daf6021d355a04261335f80f7.php on line 104

之前我对 practicabilitePiedsdesVoies 字段有错误: 无法阅读 class“App\Entity\Site”中的 属性“practicabilitePiedsdesVoies”。 我把这个 'mapped' => false 放在内置表单中,然后出现上面的错误。 您知道如何解决此错误吗?谢谢

好吧,如果你读了你的错误,它会准确地告诉你它是在提到的缓存 twig 文件的“第 104 行”抛出的。该行可能与您的代码中传递第三个字符串类型参数的行相匹配:

    {{ form_label(form.practicabilitePiedsdesVoies, null, 'Practicabilité aux pieds des voies', {'attr': {'class': 'labbel3'}}) }}

我假设字符串是标签文本,因此应该是三个参数中的第二个。所以,你可能打算这样写:

    {{ form_label(form.practicabilitePiedsdesVoies, 'Practicabilité aux pieds des voies', {'attr': {'class': 'labbel3'}}) }}