CI4: Передача переменная на пользовательское правило проверки проходит как строка, а не IntPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 CI4: Передача переменная на пользовательское правило проверки проходит как строка, а не Int

Сообщение Anonymous »

Я пытаюсь переписать страницу от CI3 до CI4.  В CI3 правило проверки взяло параметр от контроллера. Но теперь, когда я переписал код, этот параметр (ProjectId) проходит как текст «ProjectId».  Как перенести переменную из контроллера в пользовательское правило проверки в ci4?

Код: Выделить всё

    public array $manageProjectInfo = array (
        'fldPublish' => array (
            'label' => 'Make project public',
            'rules' => 'trim|check_publish_datasets[projectid]'
        )
    );
< /code>
Следующее написание PID: ProjectId в журналы: < /p>
   // check that there are no unpublished datasets if unpublishing project
    public function check_publish_datasets($fldPublish, $pid) { 
        $valid = TRUE;
        $project_model = model('Project_model');
        if (!$fldPublish) {
            log_message('debug','pid: '.$pid);
            $nDatasets = $project_model->get_projectdataavail($pid,$published=TRUE);

            if (count($nDatasets) > 0) {
                $valid = FALSE;
                $error = "This project cannot be unpublished because it contains published datasets.";
            }
        }   
        return $valid;
    }
< /code>
в приложении \ Controllers \ Manage \ project.php < /p>
    public function info($projectid = -1) {
            $basics['pagetitle'] = "Manage Project Information";
            if ($this->request->getPost()) {
                $project['fldPublish'] = $this->request->getPost('fldPublish');
            }
            //Define form attributes
            $data['formattribs'] = array(
                'class' => 'basicForm',
                'id' => 'manage-project-info-form'
            );
            //Create array of input options, setting default values to either what they were in the database or what was entered in post data for form repopulation on error
            $data['fldPublish_publish'] = array(
                'name' => 'fldPublish',
                'id' => 'fldPublish',
                'type' => 'radio',
                'value' => '1',
                'checked' => ($project['fldPublish'] == "1" ? TRUE : FALSE)
            );
            $data['fldPublish_notpublish'] = array(
                'name' => 'fldPublish',
                'id' => 'fldPublish',
                'type' => 'radio',
                'value' => '0',
                'checked' => ($project['fldPublish'] == "0" ? TRUE : FALSE)
            );
            //Check if form validation has already been run and passed   
            //Form validation rules set in form_validation config file
            if (!$this->request->is('post') || !$this->validateData($this->request->getPost(), 'manageProjectInfo')) {
                $this->common->render_page($basics, 'manage/project/info', $data);
            }
            //If successful form validation...
            else {
                //Collect post data for insert
                $project = array(
                    'fldPublish' => $this->request->getPost('fldPublish')
                );
                $validData = $this->validator->getValidated();
                foreach ($validData as $key=>$valid) {
                    $project[$key] = $valid;
                }
                //Check flag-type columns to see if they're set to one, if they aren't set values to zero.
                if ($project['fldPublish'] != 1)
                    $project['fldPublish'] = 0;
                //Convert null dates
                $builder = $this->db->table('tblProject');
                $builder->where('pkProjectID', $projectid);
                $updateattempt = $builder->update($info_changes);
                if ($updateattempt) {
                    //update the projectUpdated date and log a tblProjectChanges record
                    $this->project_model->logProjectUpdated($projectid, "project", "info");
                    $this->session->setFlashdata('successmessage', "Your changes were successfully submitted");
                    return redirect()->to('manage/project/' . $projectid . '/info');
                } else {
                    $data['errormessage'] = "There was a problem writing your changes to the database.  Please try again";
                    //Load the views with render_pages, passing either name of main view to load or array of main pages to load
                    $this->common->render_page($basics, 'manage/project/info', $data);
                }
            }
        }
    }
В документации CI4 есть пример, отправляющий один из других вводов формы в качестве параметра (https://codeigniter.com/user_guide/libr ... g-multiple -правила). Поэтому я попытался сделать скрытый ввод и пропустить его, но он также просто напечатал текстовое имя переменной в журналы.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-not-int
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»