Próbuję stworzyć trochę projektu wynajmu, w którym zasadniczo posiadam tabelę, która pokazuje 5 rodzajów wartości, które są pobierane z bazy danych (MySQL) i są pokazane za pomocą gałązki. Stosowana jest struktura MVC. Przedstawicielstwo wizualne: Wpisz opis obrazu tutaj

Przepraszam, zablokowałem informacje, ponieważ adresy i inne informacje są prawdziwe.

A teraz do problemu: chciałbym móc dodać klienta (a później także edytować i usuwać, ale najpierw wszystko).

Umieściłem to w moim pliku CustomerModel.php:

class CustomerModel extends AbstractModel {
  public function addCustomer($customerNumber, $customerName, $customerAddress, $postalAddress, $phoneNumber) {
    $customersQuery = "INSERT INTO Customers(customerNumber, customerName, customerAddress, postalAddress, phoneNumber) " .
                      "VALUES(:customerNumber, :customerName, :customerAddress, :postalAddress, :phoneNumber)";
    $customersStatement = $this->db->prepare($customersQuery);
    $customersStatement->execute(["customerNumber" => $customerNumber,
    "customerName" => $customerName,
    "customerAddress" => $customerAddress,
    "postalAddress" => $postalAddress,
    "phoneNumber" => $phoneNumber]);
    if (!$customersStatement) die("Fatal error.");
    $customerNumber = $this->db->lastInsertId();
    return $customerNumber;
  } 

A to w CustomerController.php

class CustomerController extends AbstractController {
  public function addCustomer() {
    return $this->render("AddCustomer.twig", []);
  }

  public function customerAdded() {
    $form = $this->request->getForm();
    $customerName = $form["customerName"];
    $customerModel = new CustomerModel($this->db);
    // $customerNumber = $customerModel->addCustomer($customerNumber, $customerName, $customerAddress, $postalAddress, $phoneNumber);
    $customerNumber = $customerModel->addCustomer($customerName);
    $customerAddress = $customerModel->addCustomer($customerName);
    $postalAddress = $customerModel->addCustomer($customerName);
    $phoneNumber = $customerModel->addCustomer($customerName);
    $properties = ["customerNumber" => $customerNumber,
                   "customerName" => $customerName,
                  "customerAddress" => $customerAddress,
                "postalAddress" => $postalAddress,
              "phoneNumber" => $phoneNumber];
    return $this->render("CustomerAdded.twig", $properties);
  }   
}  

A teraz, gdy próbuję wpisać informacje w moim formularzu, otrzymuję błędy:

Błąd krytyczny: Uncaught ArgumentCountError: Za mało argumentów do funkcji Carrental \ Models \ CustomerModel :: addCustomer (), 1 przekazany w /home/vagrant/code/ assignments/XXXX/src/Controllers/CustomerController.php w wierszu 18 i oczekiwano dokładnie 5 w /home/vagrant/code/ assignments/XXXX/src/Models/CustomerModel.php on line 11

(!) ArgumentCountError: Za mało argumentów do funkcji Carrental \ Models \ CustomerModel :: addCustomer (), 1 przekazany w /home/vagrant/code/ assignments/XXXX/src/Controllers/CustomerController.php w wierszu 18 i dokładnie 5 oczekiwany w /home/vagrant/code/ assignments/XXXX/src/Models/CustomerModel.php on line 11

Najwyraźniej jest coś, czego zdecydowanie nie rozumiem w tym, co zrobiłem.

Z góry bardzo dziękuję.

1
jrwebbie 5 styczeń 2020, 06:42

1 odpowiedź

Najlepsza odpowiedź

Twoja metoda public function addCustomer($customerNumber, $customerName, $customerAddress, $postalAddress, $phoneNumber) oczekuje dokładnie 5 parametrów, ale wywołujesz ją tylko z jednym (i zawsze jest taki sam). Zmień customerAdded() na coś takiego (upewnij się, że pola $form["XYZ"] zawierają rzeczywiste nazwy pól formularza):

public function customerAdded() {
    $form = $this->request->getForm();
    $customerName = $form["customerName"];
    $customerNumber = $form["customerNumber"];
    $customerAddress = $form["customerAddress"];
    $postalAddress = $form["postalAddress"];
    $phoneNumber = $form["phoneNumber"];
    $customerModel = new CustomerModel($this->db);
    $customerModel->addCustomer($customerNumber, $customerName, $customerAddress, $postalAddress, $phoneNumber);
    $properties = ["customerNumber" => $customerNumber,
                   "customerName" => $customerName,
                  "customerAddress" => $customerAddress,
                "postalAddress" => $postalAddress,
              "phoneNumber" => $phoneNumber];
    return $this->render("CustomerAdded.twig", $properties);
  }
1
brombeer 5 styczeń 2020, 05:25