【问题标题】:Phalcon 4 documentation controller handler issuePhalcon 4 文档控制器处理程序问题
【发布时间】:2020-06-15 15:40:52
【问题描述】:

我在 Windows 10 上使用 Phalcon 4.0.6,x64bit 与 psr & php 版本是 7.4.7。我遵循“https://docs.phalcon.io/4.0/en/tutorial-basic”中的基本教程示例,但出现如下错误:“异常:无法加载 SingleController 处理程序类”。是 phalcons 问题还是我做错了什么? p>

文件结构:

[引导程序]

<?php

use Phalcon\Loader;
use Phalcon\Di\FactoryDefault;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Application;
use Phalcon\Url;

// Define some absolute path constants to aid in locating resources
define('BASE_PATH', dirname(__DIR__));
define('APP_PATH', BASE_PATH . '/app');

// Register an autoloader
$loader = new Loader();

$loader->registerDirs(
    [
        APP_PATH . '/controllers/',
        APP_PATH . '/models/',
    ]
);

$loader->register();

$container = new FactoryDefault();

$container->set('view',function () {
        $view = new View();
        $view->setViewsDir(APP_PATH . '/views/');
        return $view;
    }
);

$container->set('url',function () {
        $url = new Url();
        $url->setBaseUri('/');
        return $url;
    }
);

$application = new Application($container);

try {
    // Handle the request
    $response = $application->handle($_SERVER["REQUEST_URI"]);
    $response->send();
} catch (\Exception $e) {
    echo 'Exception: ', $e->getMessage();
}

[索引控制器]

<?php

use Phalcon\Mvc\Controller;

class IndexController extends Controller
{

    public function indexAction()
    {
        return '<h1>Hello</h1>';
    }
}

【问题讨论】:

    标签: php phalcon phalcon-routing phalcon-devtools


    【解决方案1】:

    我不确定您的环境,但是当您弄错控制器的路径或名称时会出现此错误消息。

    您已将SingleController.php 更改或添加到控制器的路径中,对吧?教程中没有。

    您应该检查您的引导文件是否可以访问控制器的路径(或SingleController.php)。

    【讨论】:

    • 我没有 SingleController.php。我有两个文件一个是 bootstrap(index.php),另一个是 IndexController.php。请参阅附件的文件结构图。
    • 谢谢,您的引导程序和 IndexController 在我的环境中正常工作。你访问的是哪条路径?本教程没有路由器文件,路由器会根据您的访问路径自动工作。也就是说,IndexController::indexAction() 在访问 http:/your_env/ 时有效,但在需要访问 http:/your_env/single/ 时需要创建 SingleController::indexAction()。
    【解决方案2】:

    我刚刚使用 php 7.4.6 完成了基本教程 - 但使用了 apache 网络服务器:

    我的问题是:你的页面是用http://localhost/ 开始的吗?所以不应该出现任何“SingleController”-错误:-/

    在基本教程中,phalcon 并没有做太多 - 只是将所有步骤放在一起以从 IndexController.php(在 app/controllers/ 中)显示你的 hello world,因为你根本不使用模型、视图或模板.

    如果您也使用 apache,请注意您的 DocumentRoot 是“[WebProjectDir]/public/” -> 如果您有 apache 标准安装,它可能是:“C:\apache\htdocs\public”(Windows 风格)并在 Apache 中使用 unix 风格;)

    一开始可能有点棘手:)

    好的,也许可以在某些步骤中更正文档 - 例如 PHPStorm 的集成比视频中显示的要容易得多。也许我会在某个时候纠正它:)

    现在和 Phalcon 一起玩吧,有任何问题请回来 :)

    【讨论】:

    • 哦,忘了提 - 如果你开始并且你不喜欢命令行 - 启用 webtools - 他们太棒了! :)
    • Single 是我的项目文件名。我添加文件结构图片
    • 酷,所以,问题几乎解决了 - 你可以从 index.php 开始吗?如何在浏览器中启动网站? (--> apache 或 php builtin?如果 php -> 哪个命令行?你可以编辑你的帖子并给我们你的 .htrouter 文件吗?如果 apache -> httpd.conf 中的 DocumentRoot 和 Directory 是什么?)你很接近到目标:)
    • 我在 Windows 上使用 xampp。我的文档根目录是 htdocs。
    • 很酷,所以现在做一个小改动:找到 c:\XAMPP\apache\conf\httpd.conf • 搜索 >>DocumentRoot
    【解决方案3】:

    问题是因为项目不在根文件夹中

    这个问题的最佳解决方案是反转您之前所做的每一个更改(通过阅读一些 cmets 来判断),这建议编辑httpd.conf,这主要是因为它与移动文件夹的内容相同singlehtdocs/,这会让你的服务器卡在一个项目上

    现在是简单的解决方案:

    编辑single/public/index.php

    $_SERVER['REQUEST_URI'] 更改为$_GET['_url'] ?? '/'

    像这样:

    echo $application->handle($_GET['_url'] ?? '/')->getContent();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 2016-12-18
      • 1970-01-01
      相关资源
      最近更新 更多