在fatfree框架中实现名称空间

时间:2014-12-03 02:37:43

标签: php namespaces fat-free-framework

我正在尝试在fatfree框架中使用名称空间,但不知何故它无法找到以下类是我的设置

routes.ini

[routes]
GET /=Src\Controllers\Index->index

的index.php

namespace Src\Controllers;

class Index {
    function index($f3) {
        $f3->set('name','world');
        echo View::instance()->render('template.htm');
    }
}

全球index.php

// Retrieve instance of the framework
$f3=require('lib/base.php');

// Initialize CMS
$f3->config('config/config.ini');

// Define routes
$f3->config('config/routes.ini');

// Execute application
$f3->run();

更新:

  

错误:

     

未找到

     

HTTP 404(GET /)

     

•index.php:13 Base-> run()

更新2:

的config.ini

[globals]
; Where the framework autoloader will look for app files
AUTOLOAD=src/controllers/
; Remove next line (if you ever plan to put this app in production)
DEBUG=3
; Where errors are logged
LOGS=tmp/
; Our custom error handler, so we also get a pretty page for our users
;ONERROR=""
; Where the framework will look for templates and related HTML-support files
UI=views/
; Where uploads will be saved
UPLOADS=assets/

我不确定出了什么问题。

提前致谢。

3 个答案:

答案 0 :(得分:11)

Fat-Free Framework的自动加载器非常基础。它希望您定义一个或多个自动加载文件夹,每个文件夹都将映射到根命名空间。

因此,假设您定义$f3->set('AUTOLOAD','app/;inc/'),您的文件结构为:

- app
- inc
- lib
  |- base.php
- index.php

然后,属于MyClass命名空间(完整路径:Foo\Bar)的名为Foo\Bar\MyClass的类应存储在app/foo/bar/myclass.phpinc/foo/bar/myclass.php中(请记住:我们指定了两个自动加载文件夹。

NB :不要忘记在namespace Foo\Bar的开头指定myclass.php(自动加载器不会为您执行此操作)。

-

为了回答您的具体问题,请使用以下文件结构:

- lib
  |- base.php
- src
  |- controllers
     |- index.php
- index.php

可能有三种配置:

配置1

$f3->set('AUTOLOAD','src/controllers/')

然后src/controllers/下的所有文件都会自动加载,但请记住:src/controllers/映射到根命名空间,这意味着Index类应属于到根名称空间(完整路径:\Index)。

配置2

$f3->set('AUTOLOAD','src/')

然后src/下的所有文件都将被自动加载,这意味着Index类应该属于Controllers命名空间(完整路径:\Controllers\Index)。

配置3

$f3->set('AUTOLOAD','./')

然后./下的所有文件都将被自动加载,这意味着Index类应该属于Src\Controllers命名空间(完整路径:\Src\Controllers\Index)。

答案 1 :(得分:1)

Fat-Free始终是根命名空间“\”。 (以下可能是错误的)由于F3通过自动加载器加载您的类,您始终必须将根命名空间添加到您自己的命名空间。在这种情况下,您必须将其更改为

namespace \Src\Controllers;

当然你也必须在你的routes.ini中改变它。

GET /=\Src\Controllers\Index->index

为了帮助您将来找到这些问题,您可以使用

来提高DEBUG值
$f3->set('DEBUG', 2); // 0-3; 0=off, 3=way too much information

答案 2 :(得分:0)

试试这个配置 - 你的课程:

namespace Creo\Controllers;

框架路线

GET|POST / = \Creo\Controllers\IndexController->indexAction

文件夹位置

_your_app_dir/app/Creo/Controllers

您的引导程序文件(在本例中为_your_app_dir / app /)

spl_autoload_register(function ($className) {
    $filename = __DIR__ . '/' . str_replace('\\', '/', $className) . ".php";
    if (file_exists($filename)) {
        include($filename);
            if (class_exists($className)) {
            return true;
        }
    }
    return false;
});

希望这会有所帮助。