Parfois, il arrive que AdminCategory::deletecategory($parentId) soit appelé sans paramètre mais prototype n'a pas de valeur par défaut et donc une exception est levée. Étant donné que vous obtenez des données à partir d'une demande de publication et qu'il est toujours possible qu'une catégorie n'ait pas de parent, vous pouvez refactoriser votre méthode pour qu'elle ressemble à :
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
}
Si vous utilisez des conseils de frappe, il serait plus approprié de faire en sorte que la méthode ressemble à
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
}
Si vous vous attendez VRAIMENT à ce que parentId DOIT être passé, enveloppez plutôt l'appelant de la méthode avec try catch
if (method_exists($object, $this->method)) {
try {
call_user_func_array([$object, $this->method], $this->params);
} catch (\Exception $ex) {
// HANDLE EXCEPTION HERE
}
}