我正在使用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)
您甚至可以在多个级别执行此操作,只需确保您不会因此而过度复杂化.
你也可以这样做,以便脱钩.
例如,您可以将内部代码的代码移动到类:
$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)
您可以将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)