在Slim中实现自定义类

时间:2014-09-01 10:56:54

标签: php slim

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

目录结构

enter image description here

索引文件:

<?php

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

$app->add(new \models\MyDb());
$app->config(array(
    'templates.path' => 'templates',
));

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

$app->run();

?>

我想要实现的数据库包装器:

模型/ db.php中

class MyDb extends ..\Slim\Middleware{
public function testApp(){
    /* Returns something */
 }
}

返回的错误
致命错误:Class&#39; models \ MyDb&#39;在第6行的C:\ xampp \ htdocs \ slimtest \ index.php中找不到

我知道我犯的是一个非常简单的错误,或者我正在考虑实现,但请详细解释,因为我对Slim和Micro框架一般都是新手。

我在堆栈溢出时经历了这些问题:
hooks versus middleware in slim 2.0
Routing with AngularJS and Slim PHP

但是他们没有那么大的帮助,而且我不喜欢以程序的方式去处理并将所有逻辑写在一个文件中。

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

2 个答案:

答案 0 :(得分:3)

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

您的文件结构应为:

models
 --> MyDb.php
Slim
 --> original slim files
templates
 --> main.php
index.php (main file runnning the app)

如果你想使用Slim框架中的PSR自动加载器。

您的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();
    }
}
必须实施

call()方法,因为它扩展了\Slim\Middleware

您的index.php应如下所示:

<?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();

?>

在您之前的代码中$db是未定义的变量。

当您的main.php文件看起来像这样:

hello world   <?= $data ?>

输出将是:

  

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

按预期

答案 1 :(得分:0)

你选择了一条艰难的生活道路。我可以通过$ database-&gt; add(&#39; \ name \ of \ your \ class&#39;)建议一个框架吗?

看一下该框架的简短展示(称为db.php)https://github.com/hazardland/db.php/blob/master/samples/001.showcase.php

http://dbphp.net是代码第一个样式对象关系映射器,它甚至可以根据需要创建数据库并同步所有内容。

我认为Slim(不仅是Slim,还有其他ORM)也不是非常直观地做事。