本文介绍了致命错误:未捕获的ArgumentCountError:函数Admincategory :: deletecategory()的参数太少,的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道有一些与此相关的问题,但是有c ++或其他语言.我收到此错误,我不确定我的功能出了什么问题.这是我的错误

I know there were some questions related to this, but there are c ++ or other languages. I get this error and I'm not sure what's wrong with my function.This is my Error

我的功能是:

<?php

class Admincategory extends Controller
{


    function __construct()
    {
        parent::__construct();
    }


    function index()
    {

        $category = $this->model->getChildren(0);
        $data = ['category' => $category];
        $this->view('admin/category/index', $data);
    }


    function showchildren($idcategory)
    {

        $categoryInfo = $this->model->categoryInfo($idcategory);
        $children = $this->model->getChildren($idcategory);
        $parents = $this->model->getParents($idcategory);
        $data = ['categoryInfo' => $categoryInfo, 'category' => $children, 'parents' => $parents];

        $this->view('admin/category/index', $data);
    }


    function addcategory($categoryId = 0, $edit = '')
    {

        if (isset($_POST['title'])) {
            $title = $_POST['title'];
            $parent = $_POST['parent'];
            $this->model->addCategory($title, $parent, $edit, $categoryId);
        }
        $category = $this->model->getCategory();
        $categoryInfo = $this->model->categoryInfo($categoryId);

        $data = ['category' => $category, 'parentId' => $categoryId, 'edit' => $edit, 'categoryInfo' => $categoryInfo];
        $this->view('admin/category/addcategory', $data);
    }


    function deletecategory($parentId)
    {
        $ids = $_POST['id'];
        $this->model->deletecategory($ids);
        header('location:'.URL.'admincategory/showchildren/'.$parentId);
    }

}

?>


app.php文件


app.php file

<?php


class App
{

    public $controller = 'index';
    public $method = 'index';
    public $params = [];


    function __construct()
    {
        if (isset($_GET['url'])){
            $url = $_GET['url'];
            $url = $this->parseUrl($url);
            $this->controller = $url[0];
            unset($url[0]);
            if (isset($url[1])){
                $this->method = $url[1];
                unset($url[1]);
            }

            $this->params = array_values($url);
        }
        $controllerUrl = 'controllers/' . $this->controller . '.php';
        if (file_exists($controllerUrl)) {
            require($controllerUrl);
            $object = new $this->controller;

            $object->model($this->controller);

            if (method_exists($object, $this->method)) {
                call_user_func_array([$object, $this->method], $this->params);
            }
        }


    }

    function parseUrl($url)
    {
        $url = filter_var($url, FILTER_SANITIZE_URL);
        $url=rtrim($url,'/');
        $url = explode('/', $url);
        return $url;
    }

}



?>


和index.php


and index.php

<?php

require('views/admin/layout.php');
$category = $data['category'];

$categoryInfo = [];
if (isset($data['categoryInfo'])) {
    $categoryInfo = $data['categoryInfo'];
}
$parents = [];
if (isset($data['parents'])) {
    $parents = $data['parents'];
    $parents = array_reverse($parents);
}

?>

<style>

    .w400 {
        width: 600px;
    }

</style>

<div class="left">

    <p class="title">
        مدیریت دسته ها

        (
        <?php foreach ($parents as $row) { ?>

            <a href="admincategory/showchildren/<?= $row['id']; ?>">
                <?= $row['title']; ?>
            </a>
            -

        <?php } ?>

        <a href="admincategory/<?php if (isset($categoryInfo['id'])) {
            echo 'showchildren/' . $categoryInfo['id'];
        } else {
            echo 'index';
        } ?>">
            <?php
            if (isset($categoryInfo['title'])) {
                echo $categoryInfo['title'];
            } else {
                echo 'دسته های اصلی';
            }
            ?>
        </a>

        )

    </p>

    <a class="btn_green_small" href="admincategory/addcategory/<?= @$categoryInfo['id']; ?>">
        افزودن
    </a>


    <a class="btn_red_small" onclick="submitForm();">
        حذف
    </a>

    <form action="admincategory/deletecategory/<?= @$categoryInfo['id']; ?>" method="post">

        <table class="list" cellspacing="0">

            <tr>
                <td>
                    ردیف
                </td>

                <td>
                    عنوان دسته
                </td>

                <td>
                    مشاهده زیر دسته ها
                </td>

                <td>
                    ویرایش
                </td>

                <td>
                    انتخاب
                </td>

            </tr>

            <?php

            foreach ($category as $row) {
                ?>

                <tr>

                    <td>
                        <?= $row['id']; ?>
                    </td>

                    <td class="w400">
                        <?= $row['title']; ?>
                    </td>

                    <td>
                        <a href="admincategory/showchildren/<?= $row['id']; ?>">
                            <img src="public/images/view_icon.png" class="view">
                        </a>
                    </td>

                    <td>
                        <a href="admincategory/addcategory/<?= $row['id']; ?>/edit">
                            <img src="public/images/edit_icon.ico" class="view">
                        </a>
                    </td>

                    <td>
                        <input type="checkbox" name="id[]" value="<?= $row['id']; ?>">
                    </td>

                </tr>

            <?php } ?>

        </table>

    </form>

</div>

</div>



============



============

谢谢您的帮助!

推荐答案

有时,调用AdminCategory :: deletecategory($ parentId)时没有参数,但是原型没有默认值,因此会引发异常.由于您是从发布请求中获取数据的,并且类别很可能没有父项,因此您可以将您的方法重构为以下形式:

Sometimes it happen that AdminCategory::deletecategory($parentId) is called without a parameter but prototype do not have a default value for it and therefore exception is thrown. Since you get data from a post request and there is always a possibility that a category do not have a parent you can refactor your method to looks like:

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
}

如果您使用键入提示,则更合适的方法是使方法看起来像

If you are using typing hints more appropriate would be to make method looks like

 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
 }

如果您真的希望必须传递parentId,那么请使用try catch包装方法调用方

If you REALLY expect that parentId MUST be passed then instead wrap method caller with try catch

if (method_exists($object, $this->method)) {
    try {
        call_user_func_array([$object, $this->method], $this->params);
    } catch (\Exception $ex) {
        // HANDLE EXCEPTION HERE
    }
}

这篇关于致命错误:未捕获的ArgumentCountError:函数Admincategory :: deletecategory()的参数太少,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-13 23:53