PHP Slim - как иметь несколько объектов приложения для разных маршрутов?

1

Возможно ли иметь несколько объектов 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 routing, потому что Slim считает, что /api и /admin-panel являются частью URI запроса. Было бы намного проще иметь разные объекты приложения с различными конфигурациями, средними и т.д. Для каждого раздела страницы.

Есть идеи?

Теги:
.htaccess
slim
url-routing

2 ответа

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' в определении маршрута.

  • 0
    Это звучит хорошо и, кажется, работает. Однако я должен проверить, что произойдет, если я использую htaccess в папке public /.
0

Вы можете сделать это легко, используя группы:

$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;
    });
});
  • 0
    Хорошо, я знаю систему группировки, но я пытался ее избежать, потому что обе части моей страницы слишком разные, чтобы использовать один и тот же объект $ app.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню