2011-10-06 3 views
1

Slim 어플리케이션에 함수를 추가하고 싶었지만, 이와 같은 구조를 만드는 가장 좋은 방법을 알기 위해 PHP에 익숙하지 않았습니다. 이것은 제작 준비된 코드가 아니며 분명히 내 사용자 이름과 암호를 스크립트에 하드 코딩하지 않을 것입니다. 이 개념을 설명하기 위해 간단하게 만들었습니다.슬림 프로그램 구조

$options = array(
    'username' => 'admin', 
    'password' => 'password' 
); 

$app = new Slim(array(
    'view' => new TwigView() 
)); 

$app->config($ptions); 

function authenticate($app, $username, $password) { 
    if($username==$app->config('username') && $password==$app->config('password')){ 
     return true; 
    } else { 
     return false; 
    } 
} 

$app->get('/', function() use ($app) { // ... } 
// ... other routes 
$app->post('/login', function() use ($app) { 
    $username = $app->request()->post('username'); 
    $password = $app->request()->post('password'); 
    if(authenticate($app, $username,$password)) { 
     $app->redirect('/'); 
    } 
    $app->redirect('/login'); 
}); 

$app->run(); 

이 이해 하는가는 authenticate()$app을 통과해야하거나 더 나은 방법은 무엇입니까? authenticate()은 미들웨어가 아니지만 로그인 양식에서 제출을 누르기위한 POST 경로에서 호출 된 함수입니다.

+0

실제로 '인증'이라고하는 곳에서는 보이지 않기 때문에 말하기가 어렵습니다. 그것이 보여주는 것에서 왜 틀렸는가? 일하는 것보다 낫다. – hakre

+0

어디서 호출했는지 추가했습니다. 나는 일반적으로 '글로벌'또는 '메인'객체가 그런 식으로 전달되는 것을 보지 않기 때문에 묻습니다. –

답변

0

나는 내가 다음과 같은 클래스를 사용, 당신은 ... ohbtw $app->config($ptions);는 "레지스트리"에 대한 같은 $app->config($options);

해야 레지스트리 방법을 사용하는 것이 좋습니다 :

<? 
class Registry { 
    private static $data; 

    /** 
    * Returns saved variable named $key 
    * @param string $key 
    * @return mixed 
    */ 
    public static function get($key) { 
     if(!empty(self::$data[$key])) { 
     return self::$data[$key]; 
     } 
     return null; 
    } 

    /** 
    * Saves variable to registry with the name $key 
    * @param string $key 
    * @param mixed $value 
    * @return boolean 
    */ 
    public static function set($key, $value) { 
    if(!empty($value)) { 
     self::$data[$key] = $value; 
     return true; 
     } 
     return false; 
    } 
} 
?> 

사용 저장

Registry::set('key', $value); 

검색을 위해

Registry::get('key');