ArgumentCountError Codeigniter

Я пытаюсь настроить редактирование свойства standardId базы данных. На данный момент я вручную ввожу значение идентификатора в поле ввода для стандартного идентификатора, но в идеале в конечном итоге свойство будет невидимым.

При попытке изменить существующие свойства в БД я получаю следующую ошибку:

Тип: Ошибка подсчета аргументов

Сообщение: Слишком мало аргументов для функции Standards::edit(), 0 передано в D:\xamp\htdocs\myisogo\system\core\CodeIgniter.php в строке 532 и ровно 1 ожидается

Имя файла: D:\xamp\htdocs\myisogo\application\controllers\Standards.php

Номер строки: 39

Модель:

public function edit_standard()
{
    $this->load->helper('url');

    $data = array(
        'standardid' => $this->input->post('standardId'),
        'standardcode' => $this->input->post('standardCode'),
        'standardname' => $this->input->post('standardName')
    );

    return $this->db->insert('isostandard', $data);
}

Контроллер:

    $this->load->helper('form');
    $this->load->library('form_validation');

    $data['standard'] = $this->standard_model->get_standard_byId($standard_id);

    $this->form_validation->set_rules('standardId', 'standardid', 'required');
    $this->form_validation->set_rules('standardCode', 'standardcode', 'required');
    $this->form_validation->set_rules('standardName', 'standardname', 'required');

    if ($this->form_validation->run() === FALSE)
    {
        $this->load->view('templates/header');
        $this->load->view('templates/navbar');
        $this->load->view('standards/edit', $data);
        $this->load->view('templates/footer');
    }
    else
    {
        $this->standard_model->edit_standard();
        $this->load->view('standards/success');
    }

Вид:

<?php echo form_open('standards/edit'); ?>

<h1>Amend Existing standard </h1>
<h2><?php echo $standard['standardId']; ?></h2>

<label for = "title"> Standard ID </label>
<input type = "input" name = "standardId"/><br />

<label for = "title">Standard Code</label>
<input type = "input" name = "standardCode" /><br />

<label for = "text">Standard Title</label>
<textarea name = "standardName"></textarea><br />

<input type = "submit" name = "submit" value = "Create new standard" />

</form>

`$standard_id` – это параметр вашего метода редактирования?

lcssanches 05.04.2019 02:14

Да, это правильно

Simon Dean 05.04.2019 16:05

Смотрите мой ответ..

lcssanches 05.04.2019 16:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
2 674
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что ваш метод из Standards::edit:

public function edit($standard_id)
    $this->load->helper('form');
    $this->load->library('form_validation');

    $data['standard'] = $this->standard_model->get_standard_byId($standard_id);

    $this->form_validation->set_rules('standardId', 'standardid', 'required');
    $this->form_validation->set_rules('standardCode', 'standardcode', 'required');
    $this->form_validation->set_rules('standardName', 'standardname', 'required');

    if ($this->form_validation->run() === FALSE)
    {
        $this->load->view('templates/header');
        $this->load->view('templates/navbar');
        $this->load->view('standards/edit', $data);
        $this->load->view('templates/footer');
    }
    else
    {
        $this->standard_model->edit_standard();
        $this->load->view('standards/success');
    }
}

В этом случае всегда требуется $standard_id. Верно?

Но проблема в вашем form_open. Вы передаете URL-адрес без идентификатора.

<?php echo form_open('standards/edit'); ?>

При этом, когда вы отправляете форму, вы отправляете ее на //localhost/standards/edit, но COdeIgniter принимает только //localhost/standards/edit/<some_id_here>.

У вас есть два варианта

  1. Не передавайте URL-адрес form_open, так как вы не отправляете сообщения в другую конечную точку. <?php echo form_open(); ?>

  2. Отредактируйте свою форму form_open и соедините идентификатор <?php echo form_open("standards/edit/{$standard['standardId']}"); ?>

Я придерживаюсь первого.

Если вы хотите сделать параметр необязательным, вам нужно присвоить значение по умолчанию public function edit($standard_id=null)

Большое спасибо. Это, наконец, щелкнуло. По сути, я не передавал требуемый аргумент в метод, и это было причиной ошибки. Отмечен как лучший ответ.

Simon Dean 06.04.2019 17:03

Другие вопросы по теме