如何使用slim Framework分离不同目录中的不同路由

问题描述 投票:0回答:1

我在我的应用程序中在不同目录中设置路由时遇到一些问题。该应用程序仅加载其中一个路径文件。

文件结构

 myapp
     |_public
     |      |_vendor
     |      |_index.php
     |_src
          |_routes
                 |_books.php
                 |_customers.php

的index.php

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
require './vendor/autoload.php';

$app = new \Slim\App;

// Routes
require '../src/routes/books.php';
require '../src/routes/customers.php';
$app->run();

customers.php

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

$app = new \Slim\App;


$app->get('/api/customers', function(Request $request, Response $response){
    echo 'Customers';
});

books.php

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

$app = new \Slim\App;


$app->get('/api/books', function(Request $request, Response $response){
    echo 'Books';
});

因此,使用上述结构,根据文件结构中的顺序,仅加载路径文件中的一个。书籍路线或客户路线和订单将返回页面未找到错误。

我不明白.T

php slim-3
1个回答
0
投票

您正在每个路由文件中创建一个新的$app实例,该实例将覆盖index.php文件中的实例。

尝试从路由文件中删除$app实例以解决此问题:

customers.php

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

// $app = new \Slim\App; <-- remove this line


$app->get('/api/customers', function(Request $request, Response $response){
    echo 'Customers';
});

books.php

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

// $app = new \Slim\App; <-- remove this line


$app->get('/api/books', function(Request $request, Response $response){
    echo 'Books';
});
© www.soinside.com 2019 - 2024. All rights reserved.