我试图使用Slim,但我不确定我是否可以使用这样的结构来增长:
$app->group('/robots', function () use ($app) {
include_once('controller/RobotController.php');
$controller = new RobotController();
$app->get('/:id', array($controller, 'getRobot'))
->conditions(array('id' => '[0-9]'));
});
我只想拥有一个类似于Controller(瘦)模型(胖)的结构并响应json。但是我不希望将所有内容都放在一个文件中,而且我不想加载我不需要的每个控制器。
您有什么方法?
遗憾的是,此网址没有帮助: http://www.slimframework.com/2011/09/24/how-to-organize-a-large-slim-framework-application.html
答案 0 :(得分:1)
请注意,使用$ app->组不会隔离其中包含的任何语句。在您的情况下,无论路由是否匹配,控制器都将被实例化。
考虑这个例子:
postRegister
请求$app->group('/group1', function () use ($app) {
$app->get('/route1', function () use ($app) {
echo '<br> group1 route1';
});
echo '<br>group1';
});
$app->group('/group2', function () use ($app) {
echo '<br> group2';
});
$app->group('/group3', function () use ($app) {
echo '<br> group3';
});
将输出
/group1/route1
在您的情况下,最好组织您的文件夹结构以利用PSR自动加载。如果你已经在使用作曲家,这应该是微不足道的。然后你的小组看起来像
group1
group2
group3
group1 route1
如果您的自动加载器知道名称空间“controller”映射到“controller”文件夹,那么您不需要手动包含所述类。
请注意我使用冒号$app->group('/robots', function () use ($app) {
$app->get('/:id', 'controller\RobotController:getRobot')
->conditions(array('id' => '[0-9]'));
});
而不是paamayim :
,因为我希望Slim实例化RobotController并在该实例上调用非静态方法。
澄清:让自动加载器“知道”意味着添加正确的映射,在::
中指定autoloader
条目。这允许将命名空间映射到我们方便的任意文件夹
composer.json
这将延迟控制器的实例化,直到您找到匹配的路径。
您可以使用其他技巧,例如将不同的路由组保存在不同的文件中,然后只包括与请求的网址的第一部分匹配的路由组(在您的情况下,路由将是"autoload": {
"psr-4": {
"controller\\": "src/controllers_folder",
"model\\": "src/doctrine_models"
}
},
)