2016-07-01 2 views
0

PHP에서 단축 코드 용 사용자 정의 파서를 만들려고 노력하고 있지만 PHP 함수 (또는 심지어 PHP 라이브러리)를 사용할 지침이 필요합니다. Laravel 5를 사용 중이므로 패키지도 환영합니다.사용자 정의 단축 코드 파서

예를 들어,이 형식의 문자열을 가지고 :

Hello {{user.first_name}}, your ID is {{user.id}} 

나는 이러한 매개 변수를 포함하는 $user 개체가 있습니다. 문자열 내의 모든 shortcode 매개 변수가 개체에 존재하는지 확인하고 싶습니다. 그렇지 않은 경우, 오류를 반환하고, 예, 같으면 구문 분석 된 문자열을 반환하고 싶습니다.

Hello John, your ID is 123. 

UPDATE

나는 REST API를 짓고 있어요이는 자동화 된 이메일 시스템에 사용되는 것을 유의하시기 바랍니다. 결과가 json 응답을 반환하기 전에 내 메일 링 함수에서 사용할 수 있도록 컨트롤러 내에서 문자열이 필요합니다.

+0

이 도움이 될 수있을 수 있습니까? http://stackoverflow.com/questions/28554946/laravel-echoing-object-property-after-checking-for-existence –

+2

[Twig] (http://twig.sensiolabs.org/) 사용을 고려 했습니까? 만약 당신이 단지 그것을 변수로 사용하고 있다면 약간의 잔인 함이 있습니다. –

+0

@Alok, 내가보기에 이것은 블레이드 용입니다 ...이 문자열은 템플릿이 아니라 모델/컨트롤러 내에서 파싱되어야합니다. – Skatch

답변

2

템플릿 스타일에 따라 Mustache.php이 목표를 달성하는 데 적합한 라이브러리입니다.

작곡가를 사용하십시오. 프로젝트의 composer.json에 mustache/mustache을 추가

{ 
    "require": { 
     "mustache/mustache": "~2.5" 
    } 
} 

사용법 :

if(isset($user->first_name) && isset($user->id)) { 
    $m = new Mustache_Engine; 
    return $m->render("Hello {{first_name}}, your ID is {{id}}", $user); 
    //will return: Hello John, your ID is 123. 
}else { 
    //trigger error 
} 

업데이트 1 : 데이터 객체가 Eloquent 인스턴스의 경우

, 당신은 다음을 사용할 수 있습니다 변수가 누락 된 경우 자동으로 오류를 던지기위한 클래스 :

class MustacheData { 

    private $model; 

    public function __construct($model) { 
    $this->model = $model; 
    } 

    public function __isset($name) { 
    if (!isset($this->model->{$name})) { 
     throw new InvalidArgumentException("Missing $name"); 
    } 

    return true; 
    } 

    public function __get($name) { 
    return $this->model->{$name}; 
    } 
} 

사용법 :

try { 
    $m = new Mustache_Engine; 
    return $m->render("Hello {{first_name}}, your ID is {{id}}", new MustacheData($user)); 
}catch(InvalidArgumentException $e) { 
    //Handle the error 
} 
+0

이것은 멋지다. 이제 매개 변수 유효성 검사를 동적으로 만드는 방법을 찾아야한다. 조건을 정적으로 만들지 않고도 여러 개체에서 사용할 수있는 모든 매개 변수를 사용할 수 있지만 입력 문자열에 따라 매개 변수가 있는지 확인하고 싶다. 이 콧수염이 할 수있는 일인가요? 어쨌든, 내 문제도 해결됩니다. 다른 옵션이 제공되지 않으면 받아 들일 것입니다. – Skatch

+0

'$ user' 객체의 타입은 무엇입니까? –

+0

사용 된 모든 객체는 단 일행 Eloquent 결과 ('$ user = User :: find ($ id)')가 될 것입니다. 나는 나의 이전 논평을 분명히 할 필요가있는 것처럼 느낀다, 그것은 매우 분명하지 않다. 문자열 내에서 모든 단축 코드를 사용하고 제공된 변수에서 해당 변수를 사용할 수 있는지 확인한 다음 구문 분석하거나 오류를 반환하고 싶습니다. 사실 렌더링하기 전에 검사를 할 수 있도록 문자열 내의 모든 shortcode 어커런스가있는 배열이 필요합니다. – Skatch