layout.html에서 $aa->{$bb->cc}
CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | PHP 7.0 |
레이아웃 제작중 layout.html 파일 상단에
{@
$identifierForm = new stdClass();
$identifierForm->title = $lang->{$member_config->identifier};
$identifierForm->value = $member_info->{$member_config->identifier};
$identifierForm->name = $member_config->identifier;
Context::set('identifierForm', $identifierForm);
}
이렇게 작성하였는데..
$identifierForm->title = $lang->{$member_config->identifier};
$identifierForm->value = $member_info->{$member_config->identifier};
이 두 줄에서
PHP Parse error: syntax error, unexpected '?>' in /home/test/xe/classes/template/TemplateHandler.class.php(436) : eval()'d code on line 14
오류가 납니다..ㅠㅜ
며칠째 이 오류를 잡지 못하고 있습니다..
혹시 해결방법을 알고있는 분이 계신지요..
댓글 2
{@ ... } 안에서 { } 를 또 사용할 수 없습니다. 이것은 XE 템플릿 문법의 근본적인 한계이고, XE와의 호환성을 유지하는 라이믹스도 마찬가지입니다.
굳이 저런 식으로 참조해야 한다면
$identifierForm->title = lang($member_config->identifier);
이렇게 $lang 대신 라이믹스에서 지원하는 lang() 함수를 활용하고 (XE에는 Context::getLang()이 있습니다)
후자는 변수 선언 부분을 둘로 나누어서
$identifier = $member_config->identifier;
$identifierForm->value = $member_info->$identifier;
이렇게 쓰면 될 것 같습니다만... 만약 이것도 안 된다면 배열로 변환하여
$identifierForm->value = get_object_vars($member_info)[$member_config->identifier];
이렇게 쓰는 꼼수도 있습니다. 아무래도 XE가 오래되었다 보니 배열 문법을 좀더 잘 지원합니다.
템플릿 파일에서 선언한 변수는 모두 Context에 자동으로 들어가므로 (이게 사실 만악의 근원입니다만...) Context::set은 필요하지 않습니다.
Context::getLang(), $identifier = $member_config->identifier; 이 두개로 해결됐습니다..!!
정확하고 빠른 답변 정말 감사드립니다...
안될 상황 대비해서 꼼수까지 알려주시다니..
정말 감사합니다 ㅠㅠ