2014-03-12 2 views
1

여기 까다로운 질문이 있습니다.Laravel의 사용자 정의 setter 및 getter

저는 Laravel에 프레임 워크를 구축하고 있으며, 객체가 투명하게 Rackspace와 상호 작용하기를 바랍니다. 지금부터 가 나는 랙 스페이스

마음에없이 업로드/개체를 삭제하는 것이 가능하게
$model->file = Input::file('thing'); // and it uploads to Rackspace. 

내가 달성하고자하는 다음 단계는 내 설정 파일을 사용하여 경로를 얻는 것입니다. 문제는 $route = $file->source (예 : 데이터베이스에 hello.jpg가있는 소스가 있음)이며 $ route를 rackspace.com/WHATEVER/hello.jpg로 가져옵니다. rackspace.com/WHATEVER 부분은 설정 파일에 있습니다. 그래서 내가 필요한 유일한 방법은이 동작을 만드는 방법입니다.

나는 광범위하게 검색해 왔고, 나는 단지 __call() 방법을 찾았습니다. 나는이처럼 행동 할 필드는 동적이며 같은 배열에서 잘 살고있다 :

이미지 - 데모는 랙 스페이스의 컨테이너입니다
public static $rackspaceable = array('source' => 'images-demo'); 

.

누구나 달성 할 수 있는지 그리고 가능한지 알고 있습니까?

답변

0

이 당신이 찾고있는 수 있습니다 :

class Model extends Eloquent { 

    public static $rackspaceable = array('source' => 'images-demo'); 

    public function __get($key) 
    { 
     if (isset(static::$rackspaceable[$key])) 
     { 
      return static::$rackspaceable[$key]; 
     } 

     return parent::__get($key); 
    } 

    public function __set($key, $value) 
    { 
     if (isset(static::$rackspaceable[$key])) 
     { 
      static::$rackspaceable[$key] = $value; 
     } 
     else 
     { 
      parent::__set($key, $value); 
     } 
    } 
} 

그것을 사용하려면 : 좋은 대답했다

$model = new Model; 

var_dump($model->source); 

$model->source = 'new value'; 

var_dump($model->source); 
+0

와우 안토니오! 완벽하게 작동했습니다! 또한 __get ($ key) 메서드에서 $ model-> source에 액세스하는 방법을 알고 있습니까? $ this -> {$ key}를하면'code ErrorException : Undefined property : RackFile :: $ source'오류가 발생합니다. –

+0

재귀 호출이 발생할 수 있기 때문에 나는 그렇게 생각하지 않습니다. –

+0

안녕하세요! 내 화면을 상대로 4 시간 동안 머리를 두들 기면서 나는 특성을 사용하는 멋진 솔루션을 발견했다. 특성에서'code __get ($ name)'메소드를 구현하고 getter가 내가 모니터하고자하는 필드 중 일부에 속하는지 확인합니다. 구조는이 유사합니다 '코드 공공 기능 __get ($ 이름)' { ($ 이름 == variableOfInterest) { 반환 doSomethingSpecial } , 그렇지 않은 부모 :: __ 취득 ($ 이름) 경우} 이렇게하면 무한 재귀를 피할 수 있습니다. 어쩌면 다른 사람에게 도움이 될 것입니다! : D Antonio에게 다시 한 번 감사드립니다! –