当前位置: 首页 > 知识库问答 >
问题:

重定向到404页,而不是致命错误:未捕获的ArgumentCounterror:太少的参数无法运行

家弘业
2023-03-14

我做了一个用于训练的MVC框架,我得到了这个错误并且我不确定我的函数出了什么问题。

当我打开如下链接:http://mvctrav.com/posts/show/6时,它会显示文章,但当删除id时,它会显示错误:http://mvctrav.com/posts/show/6

我的错误如下所示:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function Posts::show(), 0 passed in C:\xampp\htdocs\trav\app\libraries\Core.php on line 51 and exactly 1 expected in C:\xampp\htdocs\trav\app\controllers\Posts.php:124 Stack trace: #0 C:\xampp\htdocs\trav\app\libraries\Core.php(51): Posts->show() #1 C:\xampp\htdocs\trav\public\index.php(4): Core->__construct() #2 {main} thrown in C:\xampp\htdocs\trav\app\controllers\Posts.php on line 124

而我的职能是:

 public function show($id)
  {
    $post = $this->postModel->getPostById($id);
    $user = $this->userModel->getUserById($post->user_id);

    $data = [
      'post' => $post,
      'user' => $user
    ];

    $this->view('posts/show', $data);
  }

这是我的核心类:

<?php
class Core
{
    protected $currentController = 'Pages';
    protected $currentMethod = 'index';
    protected $params = [];

    public function __construct()
    {
        //print_r($this->getUrl());

        $url = $this->getUrl();

        // Look in controllers for first value
        if (file_exists('../app/controllers/' . ucwords($url[0]) . '.php')) {
            // If exists, set as controller
            $this->currentController = ucwords($url[0]);
            // Unset 0 Index
            unset($url[0]);
        }

        // Require the controller
        require_once '../app/controllers/' . $this->currentController . '.php';

        // Instantiate controller class
        $this->currentController = new $this->currentController;

        // Check for second part of url
        if (isset($url[1])) {
            // Check to see if method exists in controller
            if (method_exists($this->currentController, $url[1])) {
                $this->currentMethod = $url[1];
                // Unset 1 index
                unset($url[1]);
            }
        }

        // Get params
        $this->params = $url ? array_values($url) : [];

        // Call a callback with array of params
        call_user_func_array([$this->currentController, $this->currentMethod], $this->params);
    }

    public function getUrl()
    {
        $url = isset($_GET['url']) ? $_GET['url'] : "/";
        $url = filter_var(trim($url, "/"), FILTER_SANITIZE_URL);
        $url = explode('/', $url);
        return $url;
    }
}

我的问题是:链接http://mvctrav.com/posts/show找不到或重定向到特定页面而不是显示错误,谢谢你的努力帮助!

共有1个答案

易宣
2023-03-14

1-这个错误意味着您没有将参数传递给您调用它的函数。您案例中邮件的id。您应该在视图页中解释您的代码

2-生成404页的方法是使用http_response_code:

<?php
http_response_code(404);
include('my_404.php'); // provide your own HTML for the error page
die();    

die()并不是严格必需的,但它确保您不继续正常的执行。

对于2,您可以看到如何在PHP中创建错误404?

 类似资料:
  • 我知道有一些与此相关的问题,但是有c或其他语言。我得到了这个错误,我不确定我的功能出了什么问题。这是我的错误 致命错误:Uncaught ArgumentCounter错误:函数Admincategory::deletecategory()的参数太少,在F:\xampp\htdocs\digikalamvc\core\app中传递了0。php位于第34行,在F:\xampp\htdocs\digi

  • 当我的WooCommerce购物车页面为空时,我会在页面上出现此错误,我如何消除此错误消息? 致命错误:未捕获的ArgumentCountError:参数太少,无法执行wc_get_page_id(),0在第30行 /home/s3morder/public_html/wp-content/themes/Intranet主题/伍兹商业/购物车/cart-empty.php中传递,而在 /home/

  • 我得到以下错误: 致命错误:Uncaught ArgumentCounter错误:参数太少,无法使用wpdb::prepare()函数,第635行的/home/admin/public_html/ocarinatab.com/wp-content/plugins/ocarina-tabs/ocarina-tabs.php中传递了1个,在/home/admin/public_html/ocarina

  • 我得到这个错误。我创建了一个按钮来更新表。当我点击按钮时,我得到一个错误。如何修复它? 致命错误:Uncaught ArgumentCounter错误:函数personel::update_form(),0的参数太少,在C:\xampp\htdocs\warehouse\panel\system\core\CodeIgniter中传递。php在第360行,C:\xampp\htdocs\wareh

  • 我得到以下错误: 致命错误:Uncaught ArgumentCounter错误:函数wpdb::prepare()的参数太少,1传入/homepages/39/d740877019/htdocs/test/wp content/themes/eduma/formulaire_get。php位于第108行,在/homepages/39/d740877019/htdocs/test/wp inclu

  • 我正在使用CodeIgniter 3制作新闻编辑功能,这里还有一个图像编辑功能 但有如下错误:, 遇到未捕获的异常类型: ArgumentCountError 消息:函数运算符::edit_berita()的参数太少,在D:\xampp\htdocs\ui desa\system\core\CodeIgniter中传递了0。php在第532行,预期正好为1 文件名:D:\xampp\htdocs\