2013-12-16 2 views
2
<?php 
    require 'vendor/autoload.php'; 

    // Include all controllers 
    foreach(glob("controllers/*.php") as $controller) 
    { 
    include $controller; 
    } 

    // Instantiate a new Slip application 
    $app = new \Slim\Slim(array(
    'debug' => true 
)); 

    // HOME CONTROLLER 
    $home = new Home; 
    $vr = $home->index(); 

    // Register application routes 
    $app->get('/', function() { 
     echo $vr; 
    }); 

    // Run application 
    $app->run(); 

이것은 내 컨트롤러입니다. 컨트롤러를 사용하고 모든 것을이 단일 파일에 보관하지 않습니다. 어쨌든 나는 모든 컨트롤러를 유지하는 컨트롤러 맵을 가지고있다. 그래서 그것을 indede $vr 또는 $home->index()를 부를 수있는 I가 자동으로 시작에 모두 포함하지만 나는 $home 변수 방법 get()에 전달할 수없는 것

답변

6

당신이처럼 함수에 전달할 수 있습니다

..., function() use($home){ 
    ... 

Slim도 함수의 첫 번째 인수로 $app을 전달한다고 생각합니다.

편집 : 실제로는하지 according to its docs 않는, 그래서 당신은 너무 use 문 내부 (함수 인수가 URL 매개 변수입니다) 되었해야합니다 :

$app->get('/', function() use($home, $app) { 
    $vr = $home->index(); 
    echo $vr; 
    // $app is accesible too... 
}); 
+0

흠을, 예. 이것은 나의 문제를 해결했다. 고마워요. 이제 $ app 인스턴스를 컨트롤러에 전달하고 데이터베이스 클래스 (R)를 사용하고 컨트롤러에서 $ app-> render()를 직접 호출 할 수 있습니다. –

+0

잘못된 코드 샘플을 제거하기 위해 답을 편집 하시겠습니까? 코드 샘플을 수정하기 위해 코드 샘플을 수정 한 부분을 확인하지만 코드 샘플이 실제로 두드러집니다. 나는 당신의 대답을 upvote하고 싶습니다만, 그 샘플이 아직 남아 있습니다. –

+0

. 그것을 제거하지는 못했지만 그것을 바로 잡았습니다 –