如何重构长路由的php文件(我正在使用Slim Framework)

wea*_*ide 8 php slim

我正在使用Slim Framework来实现一个简单的crud风格的应用程序.我的index.php文件变得非常冗长,并且所有不同的路由都很笨重.我该如何清理/重构此代码?例如,我对所有不同的路由和GET,POST,PUT,DELETE等具有如下代码.

$app->get("/login", function() use ($app)
{//code here.....});
Run Code Online (Sandbox Code Playgroud)

小智 13

我喜欢做的是组路由,对于每个组,我在一个名为routes的子目录下创建一个新文件.为了说明Slim文档中的一些示例代码:

index.php文件:

$app = new \Slim\Slim();
$routeFiles = (array) glob(__DIR__ . DIRECTORY_SEPARATOR . 'routes' . DIRECTORY_SEPARATOR . '*.php');
foreach($routeFiles as $routeFile) {
  require_once $routeFile;
}
$app->run();
Run Code Online (Sandbox Code Playgroud)

路线/ api.php:

// API group
$app->group('/api', function () use ($app) {

    // Library group
    $app->group('/library', function () use ($app) {

        // Get book with ID
        $app->get('/books/:id', function ($id) {

        });

        // Update book with ID
        $app->put('/books/:id', function ($id) {

        });

        // Delete book with ID
        $app->delete('/books/:id', function ($id) {

        });

    });

});
Run Code Online (Sandbox Code Playgroud)

您甚至可以在多个级别执行此操作,只需确保您不会因此而过度复杂化.

你也可以这样做,以便脱钩.


Mar*_*łek 8

例如,您可以将内部代码的代码移动到类:

$app->get("/login", function() use ($app)
{
    $user = new User();
    $user->login();
});
Run Code Online (Sandbox Code Playgroud)

甚至创建自己的类来处理路由

class Router {

    public function __construct($app) {
       $this->app = $app;
    }

   public function createRoutes() {
     $this->app->get("/login", function() use ($this->app)
     {
        $user = new User();
        $user->login();
      });

      // other routes, you may divide routes to class methods
   }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的index.php中

$router = new Router($app);
$router->createRoutes();
Run Code Online (Sandbox Code Playgroud)


Pha*_*tom 5

您可以将index.php内容移动到不同的文件中,然后将它们包括在内。例如:

index.php:

$app = new \Slim\Slim();
...
require_once 'path_to_your_dir/routes.php';
...
$app->run();
Run Code Online (Sandbox Code Playgroud)

route.php:

$app->get('/hello/:name', function ($name) {
    echo "Hello, $name";
});
...
Run Code Online (Sandbox Code Playgroud)

或者,您甚至可以为不同的路线类型创建不同的文件:

index.php:

$app = new \Slim\Slim();
...
require_once 'path_to_your_dir/routes.php';
require_once 'path_to_your_dir/admin_routes.php';
require_once 'path_to_your_dir/some_other_routes.php';
...
$app->run();
Run Code Online (Sandbox Code Playgroud)

DI服务初始化等也可以使用相同的方法(一切都来自您的index.php)