为什么我不能在Slim的被调用函数中使用$ app?

Tru*_*an1 5 php json slim

我正在尝试创建一个可重用的功能,但每次我尝试在远程功能中使用$ app时,我都会看到一个空白屏幕.这是做什么的:

$app = new \Slim\Slim();

//GET CHAPTERS
$app->get(
    '/chapters',
    function () use ($app) {
        $app->contentType('application/json');
        executeSql('SELECT * FROM chapters ORDER BY id');
    }
);

//GENERIC SQL EXECUTE
function executeSql($sql) {
    try {
        $db = getConnection();
        $stmt = $db->query($sql);  
        $results = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db = null;
        echo json_encode($results);
    } catch(PDOException $e) {
        echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
}
Run Code Online (Sandbox Code Playgroud)

但我试图在函数中移动json标头,但无法使其工作(获取空白屏幕):

$app = new \Slim\Slim();

//GET CHAPTERS
$app->get(
    '/chapters',
    function () {
        executeSql('SELECT * FROM chapters ORDER BY id');
    }
);

//GENERIC SQL EXECUTE
function executeSql($sql) use ($app) {
        $app->contentType('application/json');
    try {
        $db = getConnection();
        $stmt = $db->query($sql);  
        $results = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db = null;
        echo json_encode($results);
    } catch(PDOException $e) {
        echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
}
Run Code Online (Sandbox Code Playgroud)

我的语法或我如何使用PHP有问题吗?我也试过没有"使用($ app)",但仍然存在同样的问题.

小智 13

解决这个问题的简单方法是使用getInstance();

function yourFunction(){
   $app = \Slim\Slim::getInstance();
}
Run Code Online (Sandbox Code Playgroud)


max*_*ool 5

您总是可以将$ app对象作为参数传递给您的函数.

$app = new \Slim\Slim();

//GET CHAPTERS
$app->get(
    '/chapters',
    function () use ($app) {
        executeSql($app, 'SELECT * FROM chapters ORDER BY id');
    }
);

//GENERIC SQL EXECUTE
function executeSql(\Slim\Slim $app, $sql) {
        $app->contentType('application/json');
    try {
        $db = getConnection();
        $stmt = $db->query($sql);  
        $results = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db = null;
        echo json_encode($results);
    } catch(PDOException $e) {
        echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
}
Run Code Online (Sandbox Code Playgroud)