忍者ブログ
プログラマ、ララ・ベル子さんのゆるふわ奮闘記。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Ajaxでpostした時のデバッグ方法

こんにちは。
最近、すっごく暑いですね。ちょっと凹み気味のベル子です。

今月のベル子のネイルはラピュタをイメージしたラピュタネイルです。
子供の頃に大好きで何度も見たアニメです。
ふと手を止めて、爪先を眺めると何だか癒されます。バルス.....

あ、このままいくと前置きがいつもどおり長くなるのでサクッと本題に入ります。

Ajaxでpostした際にphp側でエラー 500 (Internal Server Error) が出てるときのデバッグ方法をまとめます。
今まで、わざわざjsを外してsubmitしてとか訳のわからないことをやっていて、本当につらかったです。うすうす、デブツールのヘッダーを見るところを見ればいいのかもしれないと思って、ヘッダーのところは何回か見てみたのですが、結局よく分からないままだったんですね。

結論から言うとResponseタブを見ればよかったんです。
私って、いつも少しだけ惜しい。
誰か褒めてください。ベル子は褒めたら伸びるタイプです。


【Ajaxのpostがうまくいかない時にエラー内容を確認する手順 Chrome編】

★ステップ1

★ステップ2
 
★ステップ3


★ステップ4



実は、このエラーのレスポンスですが、なんと、なななんとlaravel-debuggerで確認できます(笑)
先にそっちを見ろよって話です。



せっかくのデバッグツールなのに見ていないという悲しい事実。
なんかjsのデバッグと一緒にやってるとコンソールが2倍になってしまって、うざったいので速攻で畳んでしまうんです。

未だにphpの効率的なデバッグ方法があまり分かってなくて、いつも「おい、ちょっと待て、そこでdumpしろ」って師匠に言われてしまうんですよねぇ、、、、。

ブレークポイントとか設定できるデバッガがエディタについてればいいのに。

ふぅ。

なんか、暑いから会社のカフェスペースにプールを置いてくれないかなぁとか思うんですけど、私が水浴びしてても誰も突っ込んでくれないというシュールな絵になりそうなので、ガマンしようと思います。
明日はアイスでも食べながら仕事したいな。
一人じゃ寂しいから誰か一緒に食べてください。


ではでは、ばいびー。

拍手[3回]

PR

Sublime Text 3にしたら、めっちゃ便利やん!

どうも、昨日もコーディングしている夢を見てしまったベル子です。
朝、目が覚めるときに、「dd」と打ちまくっている感触がうっすら残っていて、会社に行ったら本当にddしまくることになるという、デジャヴかつ正夢を見るエスパーぶりです。

そんな私の子供のときの夢は魔法使いでした。
女の子らしくて可愛いなーと思ったことでしょう!
ベル子は意外と努力家だということをお忘れですね!!

↓ベル子が魔法使いになるためにやっていたことの一例
・ルーン文字を勉強して魔法陣を描き、その中で瞑想(家中や家の前のアスファルトに)
・タロットカードは3種類常備
・水晶で精神統一
・手作りの黒いマントを被って、おまじないを唱える練習
・魔女の歴史を勉強

そして魔法少女は悟ります。

人間に魔法は使えないということを。


あれだけ修行した私が言うのだから間違いありません。

いいですか。
人間はどんなに頑張っても、魔法を使えるようにはなりません(二度目)


前置きが長くなりましたが、そんな私だって魔法使い気分を味わえるエディタがあります。

そう、Sublime Textならね!


Sublime Textに出会ったときは、Sakuraでマクロを作りまくったり、辞書登録をしまくっていたことが走馬灯のように駆け巡りました。
あの時代とは一体何だったのか.......
「恋に落ちる」というキャッチフレーズのとおり、すぐに魅力にハマりました。
一目で惚れたし、知れば知るほど惚れました。
Sublime使ってからはドリすらほとんど使わなくなりました。

だけど、転職してphpを書くようになってから、このClassどこに書いてあるのかなぁとか探すのが面倒になってきました。
でもIDEは重たいし使い方もよく分からないから使いたくないです。←
ボスに使ってみなさいって言われたけど、1日でギブアップしました(ボスには内緒ですよ!)。

会社のイケメンくんがPhpStormを使っているのが、とてもイケメンすぎて羨ましいです。
やはりイケメンは道具からしてイケメンなんですね。

「わ、ベル子さんPhpStorm使ってるんですか?スーパーセクスィーっすね!」
って私も言われたいです。

でもPhpStorm高くないすか。
でもPhpStorm高くないすか。

そんな私に朗報です。
Sublime Text 3だと関数やClassなどの定義元にショートカットでジャンプする機能が増えました。

やったー。これだよー♪
でもpackageとか入れ直すの面倒だなーって思うズボラな私のために、インストールしたらやっておく初期設定をまとめます。

★ステップ1:これらのpackageを入れる。

{
	"in_process_packages":
	[
	],
	"installed_packages":
	[
		"AdvancedNewFile",
		"ApacheConf.tmLanguage",
		"AutoFileName",
		"Bootstrap 3 Snippets",
		"BracketHighlighter",
		"Browser Refresh",
		"Codecs33",
		"ColorPicker",
		"ConvertToUTF8",
		"CSS Snippets",
		"DocBlockr",
		"Emmet",
		"HTML5",
		"jQuery",
		"jQuery Mobile Snippets",
		"jQuery Snippets pack",
		"Laravel 4 Snippets",
		"Laravel Blade Highlighter",
		"LiveReload",
		"Package Control",
		"SCSS",
		"SublimeLinter",
		"Tag",
		"Theme - Cobalt2"
	]
}

LiveReloadとBrowser Refreshは、ほぼ使ってないです。
snippets系は勢いで入れました。おまじない的な感じで。

特にオススメなのはAdvancedNewFileで、cmd + alt + nでsublimeから画面遷移なしにpathを指定して新規ファイルが作れちゃいます。
すでにあるファイル名を指定すると、そのファイルが開きます。
賢くてチョー便利んぐ。

Codecs33というのはConvertToUTF8がsublime3だとうまくいかないので、合わせてインストールしてやると大丈夫だよってやつです。

package installの詳しい解説は↓こちらが分かりやすいです。
パッケージコントロールのインストール

このインストールしてるpackageの一覧を表示するにはcmd + shift + pして、「pack」くらい打つと一覧が出てくるので、その中からPreferenses: Package Control Settings -Userを選択すると表示できます。
慣れてきたら頭文字だけで検索できるので「ppcsu」と打てば一発です。




★ステップ2:
ショートカットの設定をする。

ベル子のユーザーショートカット設定はこちらです。
それぞれ使いやすいショートカットがあると思うので、参考までに。
Preferences > Key Bindings -User を編集してくだされ。


[
	{ "keys": ["super+b"], "command": "toggle_side_bar" },
	{ "keys": ["super+e"], "command": "goto_definition" },
	{ "keys": ["super+r"], "command": "goto_symbol_in_project" },
	{ "keys": ["ctrl+b"], "command": "jump_back" },
	{ "keys": ["ctrl+t"], "command": "jump_forward" },
	{ "keys": ["super+shift+c"], "command": "color_pick" },
	{
	    "keys": ["super+shift+r"], "command": "browser_refresh", "args": {
	      "auto_save": true,
	      "delay": 0.0,
	      "activate": true,
	      "browsers" : ["chrome"]
	  	}
	},
	{ "keys": ["super+k"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Line.sublime-macro"} },
	{ "keys": ["super+up"], "command": "swap_line_up" },
	{ "keys": ["super+down"], "command": "swap_line_down" },
	{ "keys": ["ctrl+f"], "command": "expand_selection", "args": {"to": "scope"} },
	{ "keys": ["alt+w"], "command": "toggle_setting", "args": {"setting": "word_wrap"}}
]

superっていうのは、分かりづらいですがcmdボタンのことです。

このgoto_definitionというのが、例の定義元にジャンプできる機能です。
すごく便利です〜イケてる〜。

goto_symbol_in_projectというのは、プロジェクト内でcssのid,classやjavascriptのfunctionを名前で検索する機能で、これもとても便利です。

jump_backとjump_forwardはgotoでジャンプしたファイルを行き来できるショートカットです。

これがすっごく便利なんですが、手の小さなベル子にとってctrl + tctrl + bはちょっとキツいです。行ったり来たりすると手がつりそうに...。もっと使いやすいショートカットがあればいいんですが、なんとなく分かりやすいので、この設定にしてます。

cmd + pでgoto_anythingという便利な何でも検索機能があるのですが、ベル子は殆ど使ってません。cmd + tでファイル名を指定して開くほうが分かりやすくて使いやすいので、それを使ってます。

super + kで設定してあるのは行削除です。
このショートカットが分かりづらくて見つけにくいので設定しておくと便利なのですが、super + kはいろんなところで使ってるので、super + kで始まるショートカットを使いたい人はやめたほうがいいと思います。


★ステップ3:新規ファイルはタブで開くようにする

新規ファイルを開くたびに新規ウィンドウが開くのはベル子のお好みじゃありません。
忌々しいのでユーザー設定をしてしまいましょう!

ベル子のユーザー設定はこちらです。
Preferences > Settings -User を編集してくだされ。

{
	"color_scheme": "Packages/User/SublimeLinter/Monokai (SL).tmTheme",
	// "color_scheme": "Packages/Theme - Cobalt2/cobalt2.tmTheme",
	// "theme": "Cobalt2.sublime-theme",
	"disable_formatted_linebreak": true,
	"disable_tab_abbreviations": true,
	"highlight_modified_tabs": true,
	"ignored_packages":
	[
		"Vintage"
	],
	"open_files_in_new_window": false,
	"word_wrap": true
}


disable_formatted_linebreakとdisable_tab_abbreviationsというのはEmmetを入れてると不都合なことがあるから設定したほうがいいとの記事を見て、設定したものです。
もしかしたら必要ないかも。

▼詳しくはこちら
Sublime Text 2 + Emmet で日本語入力がうまくいかない症状の解決法

Cobalt2というのはSidebarのファイルをオシャレなアイコン表示にしてくれるテーマです。
アイコンはすごくオシャレで分かりやすいんですけど、コードのカカラーリングが見慣れなくてごちゃごちゃしているので使うのをやめました。


★ステップ4:Emmetの設定をする

・!と打ってhtmlテンプレートを展開するときに<html lang="en">になってるのをデフォルトで<html lang="ja">にする。
・デフォルトで閉じタグ後コメントを追加するように設定する。
・閉じタグの後ろにコメントが挿入されるようにする。

Preferences > Package Settings > Emmet > Settings -Userを編集します。

{
    "snippets": {
        "variables": {
            "lang": "ja",
            "locale": "ja-JP",
            "charset": "UTF-8",
            "indentation": "\t",
            "newline": "\n"
        },
        "html": {
	      "filters": "html,c"
	    }
    },
    "preferences": {
        "filter.commentAfter": "<!-- /<%= attr(\"id\", \"#\") %><%= attr(\"class\", \".\") %> -->"
    }
}

▼参考にしたサイト
Sublime Text:Emmetのid・class名のコメント出力をカスタマイズする方法


これで.rowと打ってctrl + eすれば
<div class="row"></div><!-- /.row -->
となります。
気持ちいいですね!

プログラマとかコーダーって誰に決められたわけでもない自分の中のこだわりってあるじゃないですか。気持ちいい書き方とかショートカットとか(私はそんなに変態的にこだわりが強いほうでもないんですけど)。
それを完全にカスタマイズできるっていうのが、恐ろしくステキだと思います。ラブ。

あと、最近、知ったんですけどcmd + alt + vってやるとコピー履歴一覧が出てきて貼り付けられます。超絶便利!!

cmd + ctrl + pでprojectを入れ替えられるというのも最近、知りました。
便利すぎる........Sublime Text。

高機能なのに、重たくない。
そして完全カスタム可能で私色に染まってくれる。
まさに理想の彼です。

便利さって人をときめかせますよね。
だからプログラマって幸せな職業だと思います。

「うわーすごい便利!」っていうトキメキとか感動を自分も味わえるし。
そういうのが私がプログラミングをやりたい!って思った理由です。

なんでプログラミングやりたかったの?という質問を最近されたので答えてみました。
あと単純にコーディングするのが楽しいっていうのと、システム会社とかゲーム会社とかでガチなエンジニアに囲まれて仕事してみたかったんですよ!

なんか真面目なこと言っちゃいました。柄にもなく(///ω///)


私も高機能なのに軽やかな人になるぞぉ〜。

拍手[0回]

ControllerとRouteを階層化

三度の飯よりコーディングっemoji
どうも、あなたのベル子です。

ブログがちょっとふざけすぎている技術的情報量が少ないので、そのうち入ったばかりの会社で「ブログふざけすぎの刑」を言い渡されないかと、ビクビクする日々を送っていたベル子ですが、
「いいぞ、もっとやれ」ということだったので、引き続きのびのびと新人プログラマライフをお届けしていこうと思います。

今日はとびきり長いので、時間のない人はまとめだけ読むことをオススメいたします。

突然ですが私の告白を聞いてください。
最近、もやっとしていることがあります。
言おうかどうしようか迷っちゃうんですけどぉ、やっぱり言っちゃおっかなぁ、でもどうしようかなぁ、だって誤解されるとやだしぃ、てゆーか大したことじゃないんだけどぉ、でもやっぱ告っちゃおっかなぁ。

ということで、

Laravel5系の情報と4系の情報をごちゃ混ぜに読んだり見たりしているので
やや頭がこんがらがってるのもあると思うんですが、
namespaceとautoload..........
この2つの概念がよく分かっていません!!!


先日、Controllerを階層化するという作業をしていて、サブフォルダにControllerを入れたら読み込んでくれなくなりました。
え、こういうこと?と思って以下のように書いてみました。

Route::controller('/top/second', 'second/SecondController');

ブブーー不正解でした。

よく分かんないけど、こういうことかな?

Route::controller('/top/second', 'second.SecondController');

ブブーー不正解でした。

やっぱ勘じゃ無理でした。うふふ。

そこで調べてみるとcomposer dump-autoloadをコマンドーんすると読み込まれるようになるっぽいので、そうしてみました。
確かにそれでコードの修正をせずともControllerは読み込まれるようにはなりました。
自分でやっておいてなんですが、摩訶不思議です。

しかし、今度はルーティングを階層化しようとすると、Classがないよって怒られました。
そこでサブフォルダをやっぱりなくしてルーティングの解決を先にやることにしたんです。

Route::controller('/top', 'TopController');
Route::controller('/top/second', 'SecondController');
Route::controller('/top/third', 'ThirdController');

こんな感じで。
が、相変わらずlaravelちゃんのご機嫌はナナメです。
そこで、以下のようにgroup化してみたんですが、それでもダメでした。
まったくいけずなんだからっ!

Route::group(['prefix' => 'top'], function() {
    Route::controller('/', 'TopController');
    Route::controller('/second', 'SecondController');
    Route::controller('/third', 'ThirdController');
});

でもphp artisan routeしてみると、確かにルートは作られているんですよ!
stack overflowで調べてもnamespaceを使いなさい(神様より)的な回答が多くて、namespaceを使う方法も試してみたのですが、いかんせんnamespaceを使う正しい作法がよく分かってないのでうまくいきません。

namespace.....使いたくないな.....だってよく分からないし。

そんな気持ちで別の方法を必死で探していると
「それルートのやつを一番下に持っていったら動くよ!」というアンビリーバブルなほど無邪気な書き込みを見つけました。
「まさかぁ〜、そんなわけぇ〜」と思いつつやってみたところ、なんということでしょう!
動きます!

なんでもその方の言うところによると、
honyahonya.com/top/secondとリクエストしても上から検索してしまって、ルートのTopControllerを最初に読みに行ってしまうから、とのことでした。
なるほど、確かにそれなら納得です。

Route::group(['prefix' => 'top'], function() {
    Route::controller('/second', 'SecondController');
    Route::controller('/third', 'ThirdController');
    Route::controller('/', 'TopController');
});

こんなふうに書いたら動きました。
そこで疲れ果ててしまったので、Controllerの階層化は「しなくてもよくない?しなくても分かりやすいと思います!」的なアピールをそれとなくマスターPGの方(ご主人様)にして帰ることにしました。


ーーー次の日

主「app/start/global.phpのClassLoader::addDirectoriesにサブフォルダを追記したら読み込めました。(だから、あとはお前が階層化しとけよな!)」


ガチョーーーン。
app/start/global.phpのClassLoader::addDirectoriesという存在自体を初めて知ったので、言われるがまま設定しました。ちゃんと動いたし階層化もできました。
ご主人様、私、言われたとおりに出来ました!
めでたしめでたし。

.......でも、なんか、まだもやっとします。
右から左でいいわけないじゃないか。
そもそもClassLoaderってなによ。
それよりも何よりも、私の手下感はんぱないじゃないのっ!!
(手下に違いないんですけど)
くぅ〜〜〜〜 orz

悔しいので、もう一度おうちで確認してみました。

ClassLoader::addDirectoriesのところに書いてあるコメントには、「ここに書けばcomposer updateしなくてもglobalのnamespaceにcontrollerをloadできるよ!」って書いてあります。

vender/composer/autoload_classmap.phpというファイルにオートロードされるClassの配列が書いてあるようなので、こちらを確認しながらdump-autoloadをしてみると、なんとなく謎が解けてきました。

dump-autoloadするとcomposer.jsonの以下の部分で指定したフォルダ内のClassをautoload_classmap.phpで配列を作ってmapしてくれるということのようです。

	"autoload": {
		"classmap": [
			"app/commands",
			"app/controllers",
			"app/models",
			"app/database/migrations",
			"app/database/seeds",
			"app/tests/TestCase.php"
		]
	},

ですから、ClassLoader::addDirectoriesにフォルダを追加するのとcomposer dump-autoloadするのは方法が違うだけで、同じことをしてたということですね。

ということはControllerを階層化する場合は、フォルダを作ってcomposer dump-autoloadをするか、ClassLoader::addDirectoriesにフォルダを追記するかの2とおりの方法があって、どちらでもいい、というのが結論です。

もちろん上記のclassmapディレクトリの配下にないClassはロードしてくれないので、app配下に新規フォルダを作りたい場合はclassmapに追記しましょう。
不安な人はvender/composer/autoload_classmap.phpを確認してみることをオススメします。

URLの階層化と、同時進行していたので頭がこんがらがっていました。
routesでエラーが出ていたのとは別の話だったようです。


次にもやっとしてるルーティングですが、前についているスラッシュのせいかも、と思ってスラッシュを全部はずしてみましたが、やはりダメでした。
Route::controllerでルートを階層化する場合は下のサブフォルダから書いていかないとダメなようですね。

これで何とか、よく分からないnamespaceを使わずに済みました。えへへ。

えぇ?よく分からないままで終わらせていいのかですって?
それは、今がんばって勉強してるから近日公開してあげます(上からベル子)。
首を長くして待っててくだされ。


★Autoloadのまとめ
・サブフォルダを作ったときはcomposer dump-autoloadをするか、ClassLoader::addDirectoriesにフォルダを追記するかの2とおりの方法があって、そのどちらでもいい。
・Autoloadとはつまり、require_onceとかしなくても自動的に最初に必要なClassらを読み込んでくれる機能。←便利!

★Routeの階層化のまとめ
・Route::controllerでルートを階層化する場合は下のサブフォルダから書いていかないとダメ。
・Routeの書き方は大きく分けると3つある。下のまとめが分かりやすい。
http://qiita.com/michiomochi@github/items/de19c560bc1dc19d698c

★namespaceのまとめ
・今、勉強中


次回、「見知らぬnamespace」。この次もサービスサービスぅ♪てーでん。
私はもちろんアスカ推しですよーー。

拍手[0回]

LaravelでViewからExcelを作りPDFでエクスポートする方法 【手順編】

果たして私は手順を簡潔に説明できるのか.....
That is the question.


【LaravelでViewからExcelを作りPDFでエクスポートする方法】

★手順1ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
composer.jsonに以下の2行を追加して、composer update を実行します。
PHPExcelライブラリが入っていない人は、それも追加しないとダメだと思います。

"maatwebsite/excel": "1.*",
"tecnick.com/tcpdf": "~6.0.0"

★手順2ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
IPAフォントダウンロードページよりIPAゴシックというフォントをダウンロードし
ipag.ttfをvendor/tecnick.com/tcpdf/toolsのフォルダの中に入れます。

★手順3ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ターミナルでフォントを入れた階層へ移動します。

$ cd vendor/tecnick.com/tcpdf/tools


同じフォルダの中にconvert_fonts_examples.txtというマニュアルが入っているので、そちらを参考にして以下の例のようなコマンドを入力します。
※フォントを同じ階層に入れてから実行してください。

$ php ./tcpdf_addfont.php -b -t TrueTypeUnicode -f 32 -i ./ipag.ttf


★手順4ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Laravel ExcelのPDFドライバをtcPDFに変更します。

vendor/maatwebsite/excel/src/config/export.php の157行目です。

★手順5ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
views/test/にpdf_view.blade.phpを作成しViewにmetaタグを挿入します。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


★手順6ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Controllerに以下のようなコードを書きます。

例)views/test/pdf_view.blade.phpのViewをPDFに出力したい場合

$data = [
    'sampleModelObject' => $sampleModelObject
];

Excel::create('sample', function($excel) use($data)  {
  $excel->sheet('sample', function($sheet) use($data) {
        $sheet->setFontFamily('ipag');
  // PDFを横にしたい場合
        $sheet->setOrientation('landscape');
        $sheet->loadView('test.pdf_view', $data);
  });
})->export('pdf');

これでViewをExcelにしてPDFで出力できます。
最後の行を以下のようにすると、Excelファイルを保存しつつ、PDFをダウンロードさせるということができます。

})->store('xls')->export('pdf');

保存する場所はvendor/maatwebsite/excel/src/config/export.phpの130行目にあるstoreの箇所で指定します。

ということで、手順をまとめてみました!
今回はtcpdfを使っていますが、結局、dompdfでも無事にPDF出力できましたのでどちらでもよいのですが、barryvdh/laravel-dompdfを使いたい場合はdompdfで日本語フォントをインストールしてください!

その場合のコードサンプルはこちらです。

$data = [
    'sampleModelObject' => $sampleModelObject
];
$pdf = PDF::loadView('test.pdf_view', $data);
return $pdf->download('sample.pdf');

barryvdh/laravel-dompdfの場合はapp/config/app.phpの
providers に 'Barryvdh\DomPDF\ServiceProvider', を追記し
aliases に 'PDF' => 'Barryvdh\DomPDF\Facade', を追記するのをお忘れなく。

ではでは、長々とお付き合いくださりありがとうございましたm(_ _)m

拍手[2回]

LaravelでViewからExcelを作りPDFでエクスポートする方法 【四苦八苦編】

こんにちは。ベル子です。
壮大な2話完結シリーズとなっており、今回は四苦八苦した結果をまとめます。
次回は手順を完結にまとめたものをお届けする予定です。


★マイ ミッション
ExcelファイルをPDFに変換して出力せよ。

結論から言うと、ExcelからPDFにする方法として、
Excelファイルを直接PDFに変換して出力するナイスな方法は見当たりませんでした。
うえーん;;誰か教えてー。

しかし、諦めるわけにはいきません!
Excelファイルを作成し、それをPDFにする方法として
maatwebsiteのLaravel Excelというパッケージを使う方法なら見つかりました。

Excelファイルの中身をインポートしてViewに渡してあれば、
そのデータを使ってExcelファイルを作ってPDFに書き出せるのです。
配列に直接データを渡す方法もありましたが、
ViewからExcelにすれば整形する手間も省けるからラッキー♪ナイス!これだーーー!!
と思ったわけです。

他にも、
barryvdh/laravel-dompdfを使う方法もあるようです。
こちらもhtmlやViewからPDFを作成できるとのこと。


どちらも確かにPDFにはできるのですが、

日本語が表示されていない

という大問題に直面しました。


どちらもdompdfというPDFコンバータを使うのですが、日本語フォントをインストールしてやらなければいけないようです。
こちらのサイトを参考にインストールしてみようとするものの、書いてあることの半分くらいしか理解できていないため、エラーが出てインストールできない。。。。

匠に相談してみると「vendor/phenx/php-font-lib/classes/Font.phpってファイルをコピーして、vendor/dompdf/dompdf/lib/php-font-lib/classes/に入れたらいいんじゃないの?」ということだったので、そのようにしてみると無事にフォントはインストールできました。
すごい、SASUGAです。

フォントはインストールできたはずなのに、全然、日本語が表示されません。
泣きたくなりました。

この人のブログのように文字コードのmetaタグも

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

にしてみました。

この人の意見も参考にしてapp/storage/fontsというところにフォントも置いてみました。
パーミッションもwritableにしました。
だけど表示されません。

もう、おうちに帰りたいな....そんなことばかりを考えていたときです。
ある神的発想が舞い降りてきました。
そうだ、dompdfではなく別のコンバータを使おう!

Laravel Excelはdompdfとtcpdfとmpdfの3つのコンバータに対応していて、vendor/maatwebsite/excel/src/config/export.phpというファイルの以下の部分でドライバーが指定できます。


    'pdf'                         => array(

        /*
        |--------------------------------------------------------------------------
        | PDF Drivers
        |--------------------------------------------------------------------------
        | Supported: DomPDF, tcPDF, mPDF
        */
        'driver'  => 'DomPDF',

この人の手順に従ってフォントをインストールしたら、今度はすんなりとインストールできました。

やった、これなら行ける!
そう思ってダウンロードボタンをクリックしました。
ドキドキ。この胸の高鳴り♪

プギャーッ!!

?とか□とかばっかりーー。
どうやらフォントの問題ではなかったようです。

やはり、どう考えても文字コードの問題でしょう。
私だって、そうは思ってたんです。
でも、いろいろ悩みすぎて出来なすぎて田舎に帰りたくなってきたので(私の田舎は東京ですが)、やっぱり匠に相談してみることにしました。

「どっかの文字コードがおかしいんじゃない?」

すごい、私と同意見です。
これで完全にやる気のなくなった私に、また神的発想が舞い降りてきました。

もしかして読み込んでいるViewに文字コードのmetaタグが入ってないとダメなのかな?

そこでViewに文字コードのmetaタグを無理やり入れてみたところ、見事に日本語が表示されました。(ロードしていたのはパーシャルなViewだったんです。)

「っていうか、専用のViewを作ったほうがいいんじゃないの?」
というごもっともなアドバイスもいただき、そのようにしてみたのですが、
なんか.....レイアウトが崩れてるし、CSSを読み込んだらエラーが出る....。

Laravel Excelのドキュメントを読んでみます。

Most of the HTML tags are supported. 
Most of the general styles are supported.

Most of ということは対応していないタグもあるということでしょうし
Most of the general ということは一般的じゃないスタイルは対応してないよってことでしょう。


ふむー、せっかくPDFにしているのに綺麗じゃないというのは業務に使うには厳しいというか、
その辺のViewをきっちり作りこむ必要性がありそうです。

というのが、今回の結論です。

次回、「果たしてベル子は簡潔に手順を説明できるのか?!」
お楽しみにね。

拍手[8回]