blade, javascript, 따옴표 처리

viram·2022년 11월 30일
0

Blade

목록 보기
2/2

💡해당 글은 확실하지 않은 정보로 쓰였습니다.
저의 호기심으로 찾아본 정보를 토대로 추론한 내용이니 사실이 아닐 수 있습니다.

  • blade는 bladecompiler를 통해 모든 것을 PHP로 바꾼 다음에 PHP를 실행한다. blade 위에 html도, script도 style도 올릴 수 있지만 결국 라라벨 컴파일러가 돌면 이 모든 건 PHP가 된다. 이것이 blade에 PHP코드를 포함해도 성능저하가 일어나지 않는 이유다.
  • blade / script 단에서 다음과 같은 코드를 봤다.
{value: ‘@lang(’something’)}
  • 언뜻 보기에는 말이 안되는 것처럼 보였다. 일단 직관적으로 따옴표가 말이 안된다. 자바스크립트에서 동적 엘리먼트를 생성했다고 쳐도 작은따옴표 안에 큰따옴표가 있어야 한다. 아니면 이스케이프 코드를 쓰던가.
  • lang기능(localization)은 라라벨의 PHP기능이고 @lang은 라라벨 블레이드 문법이다.
  • 설마 자바스크립트가 이제 이런것도 지원하나 해서 코드도 써봤지만 에러만 나올 뿐이었다.
a="bla"hb"lah";//error 
  • 왜 이게 가능한지 곰곰히 생각해 보니, 원래 자바스크립트라면 파서에서부터 에러를 뱉는데… 블레이드가 PHP로 변환될때 아마도 문자열을 ;뒷단까지 보고 처음과 끝 따옴표가 같은지 확인한 다음에 양 끝을 한글자씩 지우는 것 같다.
  • 그러므로 아마 3중으로 ‘’를 같은 모양으로 넣으면 그제서야 에러가 날 것이다.
  • 그래서 궁금해져서 실제 라라벨 코드를 뜯어봤다. 라라벨은 오픈소스이기에…
  • 블레이드를 컴파일할때 우선 Bladecompiler.php를 부르고 거기서 다시 문자열을 다루기 위해 ComponentTagcompiler.php를 호출한다.
  • https://github.com/laravel/framework/blob/245e891e3ab17132a2aaeb6c1e32b80ec5426c68/src/Illuminate/View/Compilers/ComponentTagCompiler.php#L792
public function stripQuotes(string $value)
{
    return Str::startsWith($value, ['"', '\''])
                ? substr($value, 1, -1)
                : $value;
}
  • 역시 내 생각대로 앞부분이 “로 시작하는지만 체크한 다음에 양 끝을 한글자씩 지워버린다. 궁금증 해결!
profile
취미로 번역하고 직업으로 개발합니다

0개의 댓글