Czasami zdarza się, że AdminCategory::deletecategory($parentId) jest wywoływana bez parametru, ale prototyp nie ma dla niego wartości domyślnej i dlatego zgłaszany jest wyjątek. Ponieważ otrzymujesz dane z żądania postu i zawsze istnieje możliwość, że kategoria nie ma rodzica, możesz zmienić swoją metodę tak, aby wyglądała tak:
function deletecategory($parentId = null)
{
$ids = $_POST['id'];
$this->model->deletecategory($ids);
if (null !== $parentId) {
header('location:'.URL.'admincategory/showchildren/'.$parentId);
}
// PUT MORE OF YOUR LOGIC HERE, I DO NOT KNOW WHAT SHOULD HAPPEN
}
Jeśli korzystasz ze wskazówek dotyczących pisania, bardziej odpowiednie byłoby sprawienie, aby metoda wyglądała tak, jak
Funkcja function deletecategory(string $parentId = ''): void //void is for php7.1
{
$ids = $_POST['id'];
$this->model->deletecategory($ids);
if ('' !== $parentId) {
header('location:'.URL.'admincategory/showchildren/'.$parentId);
}
// AGAIN LOGIC HERE
}
Jeśli NAPRAWDĘ oczekujesz, że parentId MUSI zostać przekazany, zamiast tego zapakuj wywołanie metody za pomocą try catch
if (method_exists($object, $this->method)) {
try {
call_user_func_array([$object, $this->method], $this->params);
} catch (\Exception $ex) {
// HANDLE EXCEPTION HERE
}
}