【问题标题】:php mvc router not workingphp mvc路由器不工作
【发布时间】:2018-02-17 20:14:20
【问题描述】:

我有 php mvc 项目。 这是我的路由器类。 路由器类的工作是在网站的主索引页面中包含控制器。 它在本地主机上工作,但是当我上传到我的主机上时不起作用 我在做什么?

<?php
class route
{
    function __construct()
    {
        if(empty($_GET['url']))
        {
            $url = "index";
        }
        else
        {
            $url = $_GET['url'];
        }
        $url = explode("/",$url);
        if(!empty($url[0]))
        {
            $controllername = "controllers/".$url[0].".php";
            if(file_exists($controllername))
            {
                require($controllername);
                $object = new $url[0];
                //$object->loadmodel($url[0]);
                if(!empty($url[1]))
                {
                    if(method_exists($object,$url[1]))
                    {
                        if(!empty($url[2]))
                        {
                            $object->$url[1]($url[2]);
                        }
                        else
                        {
                            $object->$url[1]();
                        }
                    }
                    else
                    {
                        echo "Error";
                    }
                }
                else
                {
                    echo "Error";
                }
            }
            else
            {
                echo "Error";
            }
        }
    }
}

这是我在 error_log 中的错误

在 /home/mogeir/public_html/libs/route.php 中抛出 PHP 注意:数组 到 /home/mogeir/public_html/libs/route.php 上的字符串转换 第 33 行 PHP 注意:未定义的属性:admin::$Array in /home/mogeir/public_html/libs/route.php 第 33 行 PHP 致命错误: 未捕获的错误:函数名称必须是字符串 /home/mogeir/public_html/libs/route.php:33

【问题讨论】:

  • 请解释你的代码..

标签: php model-view-controller


【解决方案1】:

请改用以下函数调用形式 - 注释的形式也是正确的替代方案。见call_user_funccall_user_func_array

if (!empty($url[2])) {
    $object->{$url[1]}($url[2]);

    // Alternative 1
    // call_user_func(array($object, $url[1]), $url[2]);

    // Alternative 2
    // call_user_func_array(array($object, $url[1]), array($url[2]));
} else {
    $object->{$url[1]}();

    // Alternative 1
    // call_user_func(array($object, $url[1]));

    // Alternative 2
    // call_user_func_array(array($object, $url[1]), array());
}

你说:

它在本地主机上工作,但是当我上传到我的主机上时不工作我做什么?

这与报错激活或PHP版本不同有关。

【讨论】:

  • 注意:发生错误时,您应该重定向到错误控制器,将相应的错误消息作为参数传递给您选择的操作。
猜你喜欢
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 2018-03-26
  • 2016-12-24
  • 1970-01-01
相关资源
最近更新 更多