Php 在Slim中实现自定义类

Php 在Slim中实现自定义类,php,slim,Php,Slim,我第一次尝试slim,我喜欢微框架的概念。我喜欢这样一个事实:我可以管理自己的数据库层,而不是依赖于ORMs,所以我只能在slim应用程序中添加自己的类。 我浏览了Slim文档,不太清楚应该用什么在应用程序中添加我自己的类。 我现在正在使用中间件,这就是我试图实现的方法 目录结构 索引文件: 返回的错误 致命错误:在第6行的C:\xampp\htdocs\slimtest\index.php中找不到类“models\MyDb” 我知道我犯了一个非常简单的错误,或者我对实现考虑过多,但请详细解释

我第一次尝试slim,我喜欢微框架的概念。我喜欢这样一个事实:我可以管理自己的数据库层,而不是依赖于ORMs,所以我只能在slim应用程序中添加自己的类。 我浏览了Slim文档,不太清楚应该用什么在应用程序中添加我自己的类。 我现在正在使用中间件,这就是我试图实现的方法

目录结构

索引文件: 返回的错误
致命错误:在第6行的C:\xampp\htdocs\slimtest\index.php中找不到类“models\MyDb”

我知道我犯了一个非常简单的错误,或者我对实现考虑过多,但请详细解释一下,因为我对Slim和Micro框架基本上还是比较陌生的

我已经讨论了关于堆栈溢出的以下问题:

但它们并没有多大帮助,加上我不喜欢采用程序化的方式,在一个文件中编写所有逻辑


注意:我尝试过替换斜杠和目录结构,但没有成功。

我不是Slim专家,但您的代码存在多个问题

您的文件结构应为:

models
 --> MyDb.php
Slim
 --> original slim files
templates
 --> main.php
index.php (main file runnning the app)
如果您想从Slim framework使用PSR autoloader

您的
MyDb.php
文件应该如下所示:

<?php

namespace models;

class MyDb extends \Slim\Middleware{
    public function testApp(){
        return "this is my sample data";
    }

    public function call()
    {
        $this->next->call();
    }
}
<?php

require 'Slim\Slim.php' ;
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();

$app->config(array(
        'templates.path' => 'templates',
    ));

$app->get('/', function() use ($app){
        $db = new \models\MyDb();
        $data = $db->testApp();
        $app->render('main.php', array('data' => $data));
    });

$app->run();

?>
hello world   <?= $data ?>
在前面的代码中,$db是未定义的变量

当您的
main.php
文件如下所示:

<?php

namespace models;

class MyDb extends \Slim\Middleware{
    public function testApp(){
        return "this is my sample data";
    }

    public function call()
    {
        $this->next->call();
    }
}
<?php

require 'Slim\Slim.php' ;
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();

$app->config(array(
        'templates.path' => 'templates',
    ));

$app->get('/', function() use ($app){
        $db = new \models\MyDb();
        $data = $db->testApp();
        $app->render('main.php', array('data' => $data));
    });

$app->run();

?>
hello world   <?= $data ?>
你好,世界
输出将是:

你好,世界这是我的样本数据


正如所料,你选择了一条艰难的生活道路。我可以推荐一个只需$database->add('\name\of\your\class')即可完成的框架吗

看看该框架的简短展示(称为db.php)

是代码优先型对象关系映射器,它甚至可以创建数据库,并根据需要动态同步所有内容


我认为Slim(不仅是Slim,还有其他的ORM)做的事情不是很直观。

我试图实现这一点,但还是出现了一个错误,没有得到类。致命错误:在第12行的C:\xampp\htdocs\slimtest\index.php中找不到类“models\MyDb”。我们不是必须在某个地方使用名称空间吗?@Shashi您使用的代码与我显示的完全相同吗?它毫无问题地工作。您应该查看文件名(区分大小写),并输入与我在答案中使用的代码完全相同的代码。是的,我使用了完全相同的代码,并且我还双重检查了文件名,但没有运气。我得到了同样的错误:致命错误:在C:\xampp\htdocs\slimtest\index.php的第12行中找不到类“models\MyDb”。经过一些研究,我可以设法删除该错误,但现在它抛出了另一个错误。致命错误:在联机的C:\xampp\htdocs\slimtest\models\db.php中找不到类“Slim\Middleware”5@Shashi它可以正常工作(我已经再次测试过)。在Slim目录中有Middleware.php文件,所以autoloader可以毫无问题地加载它。我知道,但我已经有类似的东西了,虽然规模肯定不是那么大,但我正在寻找干净的路由和其他一些东西,我相信Slim非常适合这样做。我不是在寻找ORM,如果我没有错的话,你的答案更多的是一个建议,而不是一个直接的答案,所以这应该在评论部分。