PHP Slim-如何为不同的路由拥有多个应用程序对象?
一个网站的不同部分/路线是否可能有多个Slim应用程序对象 例如:PHP Slim-如何为不同的路由拥有多个应用程序对象?,php,.htaccess,url-routing,slim,Php,.htaccess,Url Routing,Slim,一个网站的不同部分/路线是否可能有多个Slim应用程序对象 例如: /api->拥有自己的Slim对象和自己的路由、配置等 /管理面板->拥有自己的Slim对象(可能有一些中间件) 我已经尝试使用以下方法修改Apache的.htaccess: RewriteRule ^api front_controller_api.inc.php [QSA,L] RewriteRule ^admin-panel front_controller_admin.inc.php [QSA,L] …但这似乎打破
- /api->拥有自己的Slim对象和自己的路由、配置等
- /管理面板->拥有自己的Slim对象(可能有一些中间件)
RewriteRule ^api front_controller_api.inc.php [QSA,L]
RewriteRule ^admin-panel front_controller_admin.inc.php [QSA,L]
…但这似乎打破了Slim的路由原则,因为Slim认为/api和/admin面板是请求URI的一部分。对于页面的每个部分,使用不同配置的不同应用程序对象、中间件等将更容易
有什么想法吗?我不知道这样做是否正确,但您可以尝试这样的文件夹结构:
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'
。您可以使用以下方法轻松完成:
$app->group('/api',函数()使用($app){
//您的api范围
$app->myCustom=“我的自定义”;
$app->get('/',函数()使用($app){
echo$app->myCustom;
});
});
//你的神奇中间件。
函数adminPanelMiddleware(){
echo“这是我的自定义中间件!
”;
}
$app->group('/admin panel',adminPanelMiddleware',函数()使用($app){
//您的管理面板范围
$app->anotherCustom=“另一个自定义”;
$app->get('/',函数()使用($app){
echo$app->另一个自定义;
});
});
我知道分组系统,但我试图避免使用它,因为我页面的两个部分都太不同,无法使用同一个$app对象。这听起来不错,似乎很管用。但是,如果我在public/folder中使用htaccess,我必须测试会发生什么。
$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;
});
});