Archives
10-27 17:41
Today
9
Total
287,042
관리 메뉴

FILife

Blade template 사용자 directive 본문

내가 자꾸 까먹어서 쓰는 개발 이야기/Laravel

Blade template 사용자 directive

FIL 2019. 6. 24. 10:55

참고1. https://github.com/appstract/laravel-blade-directives

참고2. https://github.com/duncan3dc/blade


blade template을 쓰다 보면, 레이아웃 내에 준비한 scripts나 styles 섹션에 각 태그를 넣어주는 일은 무척 귀찮다.


@js(), @css() 와 같이 해결하려고 시도 해 봤다.



먼저 Providers/AppServiceProvider.php 에 아래와 같이 내용을 추가한다.


public function boot()
{
Blade::directive('css', function ($css) {
return '<script type="text/javascript" src="' . $this->_assetify($css, "css", $css) . '"></script>';
});

Blade::directive('js', function ($js) {
return '<script type="text/javascript" src="' . $this->_assetify($js, "js", $js) . '"></script>';
});
}

public function stripQuote($str)
{
return str_replace("'", "", $str);
}

private function _assetify(string $file, string $type, string $path): string
{
if (in_array(substr($file, 0, 1), ["'", '"'], TRUE)) {
$file = trim($file, "'\"");
} else {
return "{{ {$file} }}";
}
if (substr($file, 0, 8) === "https://") {
return $file;
}
if (substr($file, 0, 7) === "http://") {
return $file;
}
if (substr($file, 0, 1) !== "/") {
$path = trim($path, "/");
if (strlen($path) > 0) {
$path = "/{$path}/";
} else {
$path = "/";
}
$file = $path . $file;
}
if (substr($file, (strlen($type) + 1) * -1) !== ".{$type}") {
$file .= ".{$type}";
}

return $file;
}


여기까지만 해도 사용은 가능하지만, phpstorm 에서 highlighting이 되지 않는다.


Settings > Languages & Frameworks > PHP > Blade 로 들어가, Use default settings 의 체크를 해제한다.


Directives 탭으로 넘어가 우측의 + 버튼으로 디렉티브를 추가 해 준다.


@js

Prefix: <?php echo '<script type="text/javascript" src="

Suffix: "></script>'; ?>


@css

Prefix: <?php echo '<link rel="stylesheet" type="text/css" href="

Suffix: "/>'; ?>



@js("/js/myscript.js")


잘 동작한다.

0 Comments
댓글쓰기 폼