PHP Slim - 如何为不同的路由创建多个app对象?

时间:2015-09-05 12:35:58

标签: php .htaccess url-routing slim

是否可以为网站的不同部分/路线提供多个Slim应用程序对象。

例如:

  • / api - >有自己的Slim对象,有自己的路径,配置等。
  • / admin-panel - >拥有自己的Slim对象(可能带有一些中间件)

我已尝试使用以下方法修改 Apache的.htaccess

RewriteRule ^api front_controller_api.inc.php [QSA,L]
RewriteRule ^admin-panel front_controller_admin.inc.php [QSA,L]

...但这似乎打破了Slim的路由原则,因为Slim认为 / api / admin-panel 是请求URI的一部分。对于页面的每个部分,使用不同的配置,中间件等具有不同的应用程序对象要容易得多。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我不知道这是否是正确的方法,但你尝试这样的文件夹结构:

public/
|-> api/
    |-> index.php
    |-> .htaccess
|-> admin-panel/
    |-> index.php
    |-> .htaccess

<强>更新

我“调查”了一些,并提出了另一种解决方案:

public/
|-> .htaccess
|-> admin-panel.php
|-> api.php

.htaccess

RewriteEngine On

# Some hosts may require you to use the `RewriteBase` directive.
# If you need to use the `RewriteBase` directive, it should be the
# absolute physical path to the directory that contains this htaccess file.
#
# RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin-panel/ admin-panel.php [QSA,L]
RewriteRule ^api/ api.php [QSA,L]

更新2:

使用此解决方案,您必须将所有内容分组到路径定义中的'/admin-panel''/api'

答案 1 :(得分:0)

您可以使用groups

轻松完成此操作
$app->group('/api', function () use ($app){
    //Your api scope
    $app->myCustom = "my custom";

    $app->get('/', function () use ($app) {
        echo $app->myCustom;
    });

});

//Your amazing middleware.
function adminPanelMiddleware() {
    echo "This is my custom middleware!<br/>";
}


$app->group('/admin-panel', 'adminPanelMiddleware', function () use ($app){
    //Your admin-panel scope
    $app->anotherCustom = "another custom";

    $app->get('/', function () use ($app) {
        echo $app->anotherCustom;
    });
});