Điểm:0

How to retrieve #tree values inside multiple containers?

lá cờ cn

I am using Drupal 8 and I am creating multiple forms that are made of a #tree hierarchy.

I need to retrieving the value of the "first name" from the #tree using the below code and it doesn't get the value.

$firstName = $form_state->getValue('userBoxArea')[$count]['userBox']['nameBox']['firstName'];

This is my code:

protected static $formID;

public function getFormId() {
    if (empty(self::$formID)) {
        self::$formID = 1;
    }
    else {
        self::$formID++;
    }
    
    return 'formID' . self::$formID;
}

public function buildForm(array $form, FormStateInterface $form_state){
    
    $database = \Drupal::database();
    $result = $database->select('user_details', 'u')
    ->fields('u', ['uid']);
    $row = $result->execute()->fetchAll();
    $rowCount = count($row);

    $form['userBoxArea' ] = [
        '#type' => 'container',
        '#tree' => TRUE,
    ];

    for($counter = 0; $counter < $rowCount; $counter++){
        $form['userBoxArea'][$counter] = [

            'userBox' => [
                '#type' => 'container',

                'nameBox' => [
                    '#type' => 'container',

                        'firstName' => [
                            '#type' => 'textfield',
                            '#title' => 'Enter your first name', 
                        ],

                ],

                'save' => [
                    '#type' => 'submit',
                    '#value' => $this->t('Save'),
                    '#name' => 'save-' . $counter,
                    '#submit' => ['::submitForm'],
                    '#validate' => ['::validateForm'],
                    '#limit_validation_errors' => [],
                ],

            ],        

        ];
    }

    return $form;
}

public function validateForm(array &$form, FormStateInterface $form_state) {
    $firstName = $form_state->getValue('firstName');
    
    if (strlen($firstName) == NULL) {
        $form_state->setErrorByName('firstName', $this->t('The First Name should not be empty.'));
    }
}

public function submitForm(array &$form, FormStateInterface $form_state) {
    $submitString = $form_state->getTriggeringElement()['#name'];
    $submitNumber = explode("-", $submitString);
    $count = $submitNumber[1];
    $firstName = $form_state->getValue('userBoxArea')[$count]['userBox']['nameBox']['firstName'];

    $this->messenger()->addMessage($this->t('Your first name is %firstName has been saved.', ['%firstName' => $firstName]));
    $this->messenger()->addMessage($this->t('Button number: @num', ['@num' => $count]));
}

The rowCount pertains to the row in my database. The process is to acquire firstName from the user and those variables will be saved inside the database.

I have researched articles from Drupal if there is a limitation of the #tree containers and found nothing about it.

Any suggestions if I am missing something. How do you retrieve the value of "firstName"?

Thanks in advance.

Jaypan avatar
lá cờ de
Bạn cần hiển thị thêm mã, không có đủ để gỡ lỗi. Thông tin khác về trình xử lý gửi - bộ đếm $ đang ở đâu, v.v. Bạn đang sử dụng cái gì để xác định giá trị trống?
Jeirod avatar
lá cờ cn
@Jaypan Xin lỗi về điều đó, tôi đã cập nhật mã của mình. Để xác định xem giá trị có trống hay không, tôi đang sử dụng chức năng của validateForm. Tôi đã tự hỏi làm thế nào tôi không thể truy cập trường văn bản bên trong nhiều vùng chứa.
Jeirod avatar
lá cờ cn
Lỗi tôi nhận được là "Chỉ mục không xác định: nameBox" mặc dù nó có mặt.
Điểm:0
lá cờ de

Lỗi đến từ xác thựcForm(), nơi bạn sử dụng dòng sau.

$firstName = $form_state->getValue('firstName');

Bạn cần truy xuất các giá trị tên bằng cách sử dụng cây.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.