2016-11-21 18 views
0

私は4つのフォルダすべてに独自のroute.phpを持っています。だから私は、各フォルダへのパスをuriパスに基づいて要求したいと思います。たとえば、私のウェブサイトのパスがwww.example.com/userの場合、Slimフレームワークはコントローラ/ユーザ/ルートへのパスを必要とします。私はミドルウェアを使用してこれを達成しようとしていますが、私はそれを解決するためにどのように私は "メンバ関数エラーへの呼び出し"を取得します。ここでSlim 3のURIパスに基づいてルートファイルを変更してください

は、以下の私のコードです:

//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

これはすべきではありません。すべてのルートを登録するのに時間がかからないからです。

しかし、あなたがしたい場合は、あなたはyou'rコードにいくつかの変更を行うために雑草このTODO:

  1. $request->getAttribute('route')がパスを返さないあなたなら、それはスリム

    のルートオブジェクトを返します。代わりに、パスの使用に$request->getUri()->getPath()を使用したい(それは/で始まっていないので、ルートf.exがある(/customRoute/testそれはあなたがを使用する必要がcustomRoute/test

  2. を返します。この文脈で$thisとしては、ミドルウェアの実行前に実行するためにどのルートをチェックして、あなたがtrueに設定内determineRouteBeforeAppMiddlewareを設定していないことを確認してくださいスリム

  3. のアプリのにきびからContainerInterfaceとではありません。

    ここ

実行している例:

$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(); 
関連する問題