我第一次尝试瘦身,我喜欢微框架的概念。我喜欢这样一个事实:我可以管理自己的数据库层,而不是依赖于ORM,所以休息一下,我很难在slim应用程序中添加自己的类。 我浏览了Slim文档,我不应该清楚应该在应用程序中添加自己的类。 我现在正在使用中间件,这就是我试图实现的方式。
目录结构
<?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();
?>
我想要实现的数据库包装器:
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
但是他们没有那么大的帮助,而且我不喜欢以程序的方式去处理并将所有逻辑写在一个文件中。
注意:我尝试过替换斜杠和目录结构,但没有运气。
答案 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)也不是非常直观地做事。