2016-11-21 1 views
0

Итак, у меня есть 4 папки, у которых есть свой собственный route.php. Поэтому я хотел бы указать путь к каждой папке на основе пути uri. Например, если мой путь к веб-сайту - www.example.com/user, то для структуры Slim потребуется путь к контроллеру/пользователям/маршрутам. Я пытаюсь добиться этого, используя промежуточное программное обеспечение, но когда я его тестирую, я получаю сообщение «Вызов функции-члена», поэтому как исправить это.Изменить файлы маршрутов на основе пути URI в Slim 3

Вот мой код ниже:

//determine the uri path then add route path based upon uri 
$app->add(function (Request $request, Response $response, $next) { 
    if (strpos($request->getAttribute('route'), "/user") === 0) { 
     require_once('controllers/users/routes.php'); 
    } elseif (strpos($request->getUri()->getPath(), "/public") === 0) { 
     require_once('controllers/public/routes.php'); 
    } elseif (strpos($request->getUri()->getPath(), "/brand") === 0) { 
     require_once('controllers/brands/routes.php'); 
    }elseif (strpos($request->getUri()->getPath(), "/admin") === 0) { 
     require_once('controllers/admin/routes.php'); 
    }elseif (strpos($request->getUri()->getPath(), "/") === 0) { 
     require_once('routes.php'); 
    } 

    $response = $next($request, $response); 
    return $response; 
}); 

Поэтому, прежде чем что-либо рамки определяет маршрут добавляет необходимый путь. Но что-то не работает правильно, какие-то идеи?

+0

почему вы это делаете? – jmattheis

+0

, чтобы сохранить маршруты разделенными и загружать только страницу маршрута в индекс, чтобы она могла работать быстрее .. или я не смотрю ее правильно? –

+0

, что не имеет большого значения. – jmattheis

ответ

0

Ну, вы не должны этого делать, потому что не требуется много времени для регистрации всех маршрутов.

Но если вы хотите TODO это вы полоть, чтобы внести некоторые изменения в you'r код:

  1. $request->getAttribute('route') не возвращает путь, он возвращает объект маршрута из тонкого

    Если вы хотите использовать путь использовать $request->getUri()->getPath() вместо (он не начинается с / поэтому маршрут f.ex является (/customRoute/test возвращает customRoute/test

  2. Вы должны использовать $app в $this в этом контексте является ContainerInterface от Прыщ, а не приложение из тонкой

  3. Убедитесь, что вы не установили determineRouteBeforeAppMiddleware в настройках, чтобы true, как он проверяет, какой маршрут выполнить перед выполнением промежуточного программного обеспечения.

Здесь бегущего например:

$app = new \Slim\App(); 
$app->add(function($req, $res, $next) use ($app) { 
    if(strpos($req->getUri()->getPath(), "customPath") === 0) { 
     $app->get('/customPath/test', function ($req, $res, $arg) { 
      return $res->write("WUII"); 
     }); 
    } 
    return $next($req, $res); 
}); 
$app->run(); 
Смежные вопросы