こなさんち

しがないフリーランスエンジニアの備忘録。

カスタム関数追加してみたよ@Laravel5

お疲れ様です。

FuelやCakeとは異なって、既存でのHTMLヘルパーがないLaravel5では、 laravelcollective を使用しますね。 ただ、それを使用しても cssやjsのタグは自分でタグを書かなければなりません。 ※もしあったら教えてください

ということで、自分で作りました。

1. /custome_helplers/form_builder.php

ファイル名は適当で良いです。

<?php

if(!function_exists('asset_css')) {
  /**
   * Create link tag element for css
   * 
   * @param   string  $file_name
   * @param   bool    $secure = false
   * @return  string  link_tag
   */
  function asset_css($file_name, $secure = false)
  {
    if (is_array($file_name)) {
      
      $tag = '';
      for ($i = 0; $i < count($file_name); $i++) {
        $relative_file_path = '/assets/css/' . $file_name[$i] . '.css';
        $tag .= make_tag($secure, 'link', $relative_file_path, ['rel' => 'stylesheet']) . '\n';
      }
      
    } else {
      
      $relative_file_path = '/assets/css/' . $file_name . '.css';
      $tag = make_tag($secure, 'link', $relative_file_path, ['rel' => 'stylesheet']);
    }
    return $tag;
  }
}

if(!function_exists('asset_js')) {
  /**
   * Create link tag element for javascript
   * 
   * @param   string  $file_name
   * @param   bool    $secure = false
   * @return  string  script_tag
   */
  function asset_js($file_name, $secure = false)
  {
    if (is_array($file_name)) {
      $tag = '';
      for ($i = 0; $i < count($file_name); $i++) {
        $relative_file_path = '/assets/js/' . $file_name[$i] . '.js';
        $tag .= make_tag($secure, 'script', $relative_file_path, ['type' => 'text/javascript']) . '\n';
      }
      
    } else {
      $relative_file_path = '/assets/js/' . $file_name . '.js';
      $tag = make_tag($secure, 'script', $relative_file_path, ['type' => 'text/javascript']);
    }
    
    return $tag;
       
  }
}


if(!function_exists('make_tag')) {
  /**
   * Create link tag
   * 
   * @param   string  $tag_header
   * @param   string  $relative_file_path
   * @param   string  $attr = ''(array)
   * @return  string  script_tag
   */
  function make_tag($secure, $tag_header, $relative_file_path, $attr = '')
  {
    $file_full_name = asset($relative_file_path, $secure);
    $abs_file_path = public_path($relative_file_path);
    $timestamp = filemtime($abs_file_path);
    
    $tag_attr = ' ';
    if(is_array($attr)){
      foreach ($attr as $key => $value) {
        $tag_attr .= $key . '="' . $value . '" ';
      }
    } else {
      $tag_attr .= $attr;
    }
    
    switch ($tag_header) {
      case 'link':
        $tag_file_name = ' href="' . $relative_file_path . '" ';
        $tag_end = '';
        break;
      
      case 'script':
        $tag_file_name = ' src="' . $relative_file_path . '?' . $timestamp . '" ';
        $tag_end = '</' . $tag_header . '>';
        break;
        
      default:
        $tag_file_name = '';
        $tag_end = '';
        break;
    }
    
    $tag_begin = '<' . $tag_header . $tag_file_name . trim($tag_attr) . '>';
    
    $tag = $tag_begin . $tag_end;
    
    return $tag;
  }
}

2. public/index.php

追記するよ

require __DIR__.'/../custome_helplers/form_builder.php';

こんな感じで使うよ

 <head>
   <meta charset="utf-8">
   <title>@yield('title')</title>
   <link rel="stylesheet" href="/assets/css/style.css">
   {!! asset_css('style') !!}
   {!! asset_js('vue.min') !!}
 </head>