【问题标题】:Routing issue using namespaces in Fat Free在 Fat Free 中使用命名空间的路由问题
【发布时间】:2017-02-19 13:27:01
【问题描述】:

在我决定实施命名空间之前,我的项目运行良好。从那以后,我遇到了一些问题。我熟悉了this post,它有类似的问题,但没有运气。我也读过the documentation about namespaces,但也没有用。

我的文件结构如下:

-fatfree
  -index.php
  -app
    -config.ini
    -routes.ini
    -controllers
      -Controller.php
      -DeviceController.php
    -models
      -*.php
    -views
      -*.html
  -lib
    base.php
    ...

我的routes.ini 文件如下所示:

[routes]

GET @devices: /devices = \Controllers\DeviceController->devices

我的DeviceController 类看起来像:

<?php

namespace Controllers;

class DeviceController extends \Controller
{
    public function devices($f3)
    {
        ...
    }

    ...
}

我的index.php 文件如下所示:

<?php

$f3 = require("lib/base.php");
$f3->config("app/config.ini");
$f3->config("app/routes.ini");

new Session();

$f3->run();

当我导航到设备页面时,我收到以下错误:

找不到

HTTP 404 (GET /devices)

[/fatfree/lib/base.php:1462] Base->error(404) [/fatfree/index.php:13] Base->run()

【问题讨论】:

  • 请提供您的index.php文件的代码。
  • 我刚刚编辑了我的帖子以包含index.php的内容
  • 从文档中,建议使用小写命名自动加载的 php 文件,并使用 camelCase 命名类名

标签: php namespaces fat-free-framework


【解决方案1】:

您是否尝试将控制器文件重命名为 controller.php 和 devicecontroller.php?

【讨论】:

  • 你的模型也有命名空间吗?如果是这样,您可能需要使用 $this-&gt;devicesModel = new \ModelsNS\DevicesModel($db); 您可以将 DEBUG 变量设置得更高(2 或 3),以便我们可以看到更大的错误跟踪吗?
  • 我认为它应该只是 namespace Models; 没有前导反斜杠。不确定这是否会有所作为。我使用这样的设置并且它有效。在我的控制器上,我需要致电 $model = new \Models\Mymodel;
  • 啊,而且我认为你应该使用extends Controller 而不是extends \Controller
  • 是的,一旦您使用命名空间,您将不得不在大多数调用中使用反斜杠,包括 Base、DB、Session 和几乎所有调用。确保您的所有 extends 没有使用反斜杠
  • 这取决于正在使用的自动加载器以及正在使用的文件系统。例如,Windows 对所有情况一视同仁,而大多数(或所有?)Linux 发行版对它们的处理方式不同。
猜你喜欢
  • 2012-01-25
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多