2016-11-01 7 views
1

Ich denke, das ist wahrscheinlich eine einfache Frage. Kann mir jemand helfen, herauszufinden, wie ich die Variable $route in jeder meiner Routerfunktionen am besten erreichen kann? Ich versuche, viele Slim 3 Router-Funktionen aus einem Array hinzuzufügen. Der folgende Code ist aus /src/routes.php:PHP-Bereich in Slim Framework 3

<?php 
// Standard CRUD Routes (based on templates) 

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

    $routes = [ 
    'calendar' => [ 
     'table' => 'calendar', 
     'prefix' => 'cal', 
     'sort' => 'cal_name_orig', 
     'fields' => ['cal_name_orig','cal_name_tran','cal_public','cal_color'], 
     'permRead' => 1, 
     'permWrite' => 1 
    ], 
    'classroom' => [ 
     'table' => 'classroom', 
     'prefix' => 'room', 
     'sort' => 'room_name', 
     'fields' => ['room_owner_p_id','room_name','room_common','room_capacity_normal','room_capacity_max','room_current_desks'], 
     'permRead' => 1, 
     'permWrite' => 1 
    ] 
    ]; 

    // register all standard routes using above data 
    foreach ($routes as $key => $route) { 
    echo "<br><br>ROUTE: $key<br>"; 
    print_r($route); 

    // Add Route: retrieve all records 
    $app->get('/' . $key . 's', function ($request, $response, $args) { 
     return $this->common->getAll($route['table'], $route['prefix'], $route['sort'], $route['permRead']); 
    }); 

    // Add Route: retrieve specific record 
    $app->get('/' . $key . '/[{id}]', function ($request, $response, $args) { 
     return $this->common->getById($route['table'], $route['prefix'], $args['id'], $route['permRead']); 
    }); 

    // Add Route: create new record 
    $app->put('/' . $key . '/new', function ($request, $response, $args) { 
     return $this->common->putNew($route['table'], $route['prefix'], $route['fields'], $route['permWrite']); 
    }); 

    // Add Route: update specific record 
    $app->post('/' . $key . '/[{id}]', function ($request, $response, $args) { 
     return $this->common->postById($route['table'], $route['prefix'], $args['id'], $route['fields'], $route['permWrite']); 
    }); 

    // Add Route: delete specific record 
    $app->delete('/' . $key . '/[{id}]', function ($request, $response, $args) { 
     return $this->common->deleteById($route['table'], $route['prefix'], $args['id'], $route['permWrite']); 
    }); 
    } 

}); 

Wie Sie vielleicht vermuten, der Fehler ich bin immer ist Notice: Undefined variable: route in C:\Wamp\www\ravine\server\src\routes.php on line 46.

Die foreach-Schleife arbeitet und zeigt jede Route zum Bildschirm an (zu Debugging-Zwecken). Beachten Sie, dass alle $this->common-> Funktionen benutzerdefinierte Funktionen sind, die ich geschrieben habe, und ich bin zuversichtlich, dass sie gut funktionieren (solange ich ihnen die richtigen Parameter übergeben kann).

Wie kann/sollte ich auf $route von der foreach-Schleife zugreifen?

Antwort

1

Versuchen

$app->put('/' . $key . '/new', function ($request, $response, $args) use ($route) { 
+0

Das funktionierte perfekt. Ich benutze PHP seit vielen Jahren ... aber habe nie das Schlüsselwort "use" verstanden. Das bringt also den Umfang in die Funktion? – LStarky

+0

Ja, um einfach zu sein: "verwenden" macht es möglich, Variablen von außerhalb zu verwenden :) – OlajosCs