致命错误:未捕获ArgumentCountError:函数Admincategory :: deletecategory()的参数太少,

时间:2017-11-04 07:16:25

标签: php html mysql apache phpmyadmin

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

  

致命错误:未捕获ArgumentCountError:函数Admincategory :: deletecategory()的参数太少,第34行的F:\ xampp \ htdocs \ digikalamvc \ core \ app.php传递0,F:\ xampp中预期为1 \ htdocs \ digikalamvc \ controllers \ admincategory.php:50堆栈跟踪:#0 F:\ xampp \ htdocs \ digikalamvc \ core \ app.php(34):Admincategory-> deletecategory()#1 F:\ xampp \ htdocs \ digikalamvc \ index.php(6):在第50行的F:\ xampp \ htdocs \ digikalamvc \ controllers \ admincategory.php中抛出的App-> __ construct()#2 {main}

我的功能是:

<?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文件

<?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

<?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>

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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
}

如果您使用的是打字提示,那么更合适的方法就是使方法看起来像

 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 (method_exists($object, $this->method)) {
    try {
        call_user_func_array([$object, $this->method], $this->params);
    } catch (\Exception $ex) {
        // HANDLE EXCEPTION HERE
    }
}