Phlex는 HTML 태그를 Ruby 메서드로 추상화하여 사용합니다. p 메서드는 <p> 태그에, h1은 <h1> 태그에 매핑되며, 이는 register_element를 통해 정의됩니다.
속성 처리
HTML 속성은 키워드 인자로 전달됩니다.
-
class속성: 문자열 배열을 지원하여 조건부 클래스 적용에 효과적입니다.ruby h1(class: ["font-bold", (title_size_classes if large?)]) -
style속성: 해시를 값으로 받아 인라인 스타일을 생성하며, 이메일 템플릿 등에 유용합니다.ruby div(style: { color: "red", background: "blue" }) -
data속성: 중첩된 해시를 통해data-접두사가 붙는 속성을 정의하며, Hotwire와 같은 기술에서 활용됩니다.ruby div(data: { foo: "bar" }) -
불리언 속성:
true값을 전달하면 속성 이름만 포함된 불리언 속성을 생성합니다 (checked)."true"문자열은checked="true"로 렌더링됩니다.
텍스트 처리
복잡한 텍스트 블록을 구성할 때는 plain 및 whitespace 메서드를 명시적으로 사용해야 합니다. 단순히 문자열을 나열하는 방식은 제대로 렌더링되지 않을 수 있습니다.
보안 기능
Phlex는 기본적으로 XSS 공격 방지를 위해 모든 사용자 입력을 자동으로 이스케이프합니다. 인라인 JavaScript와 같이 이스케이프를 우회해야 하는 콘텐츠는 safe 메서드를 사용하여 명시적으로 안전하다고 표시해야 합니다. 이때 보안 취약점이 발생하지 않도록 주의해야 합니다.
ruby
a(onclick: safe("alert('message')"))