Warning: Declaration of FeedWordPie_Item::get_id($hash = false) should be compatible with SimplePie_Item::get_id($hash = false, $fn = 'md5') in /home/nekyo/nekyo.wp.xdomain.jp/public_html/wp-content/plugins/feedwordpress/feedwordpie_item.class.php on line 0

Warning: Declaration of FeedWordPress_Parser::parse(&$data, $encoding) should be compatible with SimplePie_Parser::parse(&$data, $encoding, $url = '') in /home/nekyo/nekyo.wp.xdomain.jp/public_html/wp-content/plugins/feedwordpress/feedwordpress_parser.class.php on line 0
nekyo | 日々のできごと | ページ 4

nekyo のすべての投稿

【Laravel 5.4】ファサード の作り方

クラス作成

場所はサービスプロバイダ側でひもづけできていれば、必ずしも app/Services である必要はなさそう。
app/Services/Payment.php
[crayon-66383338f0598993747790/]

サービスプロバイダ作成

artisan コマンドでスカフォールド
[crayon-66383338f05a3802612268/]
レジスタ部分にバインドを記述
app/Providers/PaymentServiceProvide.php
[crayon-66383338f05a8800036513/]

ファサードクラスを作成

app/Facades/Payment.php
[crayon-66383338f05ae228793527/]

サービスプロバイダと別名の設定を追加する。

config/app.php
[crayon-66383338f05b3180597741/]

使い方

これで以下の様に使えるようになる。
use はファサードを指定する。
[crayon-66383338f05b8908957222/]

【Laravel 5.4】validationのロケールで、テーブルのフィールド名を日本語訳する方法

まずバリデーションエラーを日本語化しておく

resources/lang/en を ja にコピーして中味を日本語訳するか
ここら辺(Laravelの日本語レポジトリの作成とか)から、一旦 5.3 用を入れて差分修正しておく。
config/app.php を編集して、ja のロケール設定もしておく。

フィールド名の定義

attributes に記述する。
resources/lang/ja/validation.php
[crayon-66383338f19ae373387772/]

フィールド名を変換する

バリデーションエラーは勝手に変換してくれるけど、テーブルのフィールド名も定義した attributes の日本語訳で表示したい。
ローカライズは trans 関数を使う。
validation.php の attributes にある email を指定する場合は以下のようなキーを指定する。
[crayon-66383338f19b8337163083/]
対応する訳があれば、その値(「eメール」とか)が返る。
訳がなければキーの値がそのまま('validation.attributes.email')返る。 例えばこんな関数を作ってラベルをまとめて日本語化したりすると
table にテーブル名を渡しただけで自動でテーブル一覧を表示したりして
TableController.php
[crayon-66383338f19bc040441357/]
あとは、こんな感じでループを回せばテーブル一覧が表示できる。
table.blade.php
[crayon-66383338f19c7571489033/]
data が null なら「データなし」と表示。
data が一件もなければ「データなし」と表示。
ループの一回目にタイトル行を表示
ループの最後にテーブルのクローズタグを表示。
あとは data 行分、fields のカラム分を表示。

【Laravel 5.4】マイグレーションで postgresql に テーブル カラム コメント を付ける。

はじめに

最近は、DBからER図をリバース作成するツールとかがある。
しかし laravel のマイグレーションのコメントは MySQL しか対応していない。
(MySQL はテーブル作成時にコメントつけられるからだろうな。)
ポスグレでマイグレーションの度にコメントが消えると、毎回コメントを入れ直す必要がでてきて、リバース作成ツールとか使えないのもなんなのでちょっと対応策を考えてみた。

Postgresql だったらテーブル・カラムコメントを後づけ

ポスグレの場合 ->comment() を使っても何も起こらないので mysql だった場合も想定して ->comment() もつけておく。
もし config/database.php の default が pgsql だったら、テーブル・カラムにコメントを付けるSQLを発行する。
2014_10_12_000000_create_users_table.php
[crayon-66383338f1d58211699913/]

早く Postgresql も comment 対応して欲しい。

MySQLがOSS界ではスタンダードだけれど、トランザクションやバキュームの関係から商用ではポスグレを選択するケースも少なくないので、できれば早く標準でサポートして欲しいなぁ。

Bash on Windows で php7.2 + (apache2|nginx) + laravel 5.5

先ずは bash on windowsインストール

Windows10 上に Linux 環境(bash on windows(以降 bow と記載))を作成する。 [スタートアップ]右クリック→[アプリと機能]→右上の[プログラムと機能]→[Windows の機能の有効化または無効化]
ダイアログが表示されるので ☑ Windows Subsystem for Linux (Bata) をチェック → [OK] [スタートアップ]→[設定]→[更新とセキュリティ]→[開発者向け]→◎ 開発者モード
「開発者モードをオンにしますか?」と聞かれるので「はい」を選択 [スタートアップ]→[Windows システムツール]→[コマンドプロンプト]してプロンプトが出たら「bash」と入力

bow に php7.2 インストール

php が入っていないことが前提
[crayon-66383338f202a248399141/]
どんなphpバージョンがインストールできるかは以下で確認可能。
[crayon-66383338f2032973295764/]

composer インストール

[crayon-66383338f2036217192111/]

laravel インストーラ インストール

root ユーザで実行しようとすると怒られる。
[crayon-66383338f203a008214747/]

bowのファイルの場所は?

C:\Users\ユーザ名\AppData\Local\lxss\rootfs が bow のルートになる。
ただし、Windows側から直接ファイルを修正すると権限が変わって
消せなかったり参照できないファイルになる場合があるので、
bow コンソールか ssh で修正する方が無難。

Webサーバーインストール

apache2

[crayon-66383338f203f963291784/]
起動時に「Invalid argument: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT」が出たら設定ファイルに以下の追記して apache2 をリスタート
/etc/apache2/apache2.conf
[crayon-66383338f2043929155742/]

.htaccess を有効にするなら

/etc/apache2/sites-available/000-default.conf
[crayon-66383338f2046160535435/]
[crayon-66383338f204a440873709/]

nginx

[crayon-66383338f204d207620471/]
  • php-fpm の設定ファイルは /etc/php/7.2/fpm/pool.d/www.conf だが、nginx インストール後であれば、user, group は www-data になっていると思うので修正の必要はない。
  • /etc/nginx/site-enabled/default は /etc/nginx/site-available/default のシンボリックリンクなので、どちらを編集しても良い。
※ laravel を動かすには default に更に追加の設定が必要だけれど、今のところ
動いていないので apache2 を使ってください。また何かわかったら追記します。 ブラウザから localhost で接続すると参照可能。

mysqlインストール

[crayon-66383338f2053864192016/]
インストール中に root のパスワードを聞いてくるので覚えておくこと。

トラシュー

以下のようなエラーが出たらキーをダウンロード
[crayon-66383338f2056657389506/]

おまけ

sshd起動

[crayon-66383338f205a254329814/]
※ sshd を立ち上げるのにサービス名は ssh という罠に注意

【Laravel 5.4】artisan 主要な使い方チートまとめ

はじめに

laravel では何をするにも artisan を良く使うが、毎回調べるのも何なので、
よく使うコマンドをチート的にまとめておく。

プロジェクト作成

[crayon-66383338f24d7790935514/]
storage 以下に書込み権限がないと 500エラーになるので注意。

コントローラ作成

[crayon-66383338f24df700027599/]
app/Http/Controller/ に作成される --resource を付けるとリソースに対する様々なアクションを作成してくれる。

モデル作成

[crayon-66383338f24e3041703917/]
app/に作成される

テーブル作成

[crayon-66383338f24e7085589059/]
database/migrations/に作成されるので、フィールド等を追記する。
No such file or directory と表示され、エラーになったら、とりあえず以下を実行してみる。
[crayon-66383338f24eb132553888/]
YYYY_MM_DD_HH_II_SS_create_admins_table.php
[crayon-66383338f24ee033680741/]

マイグレーション実行

実際のテーブルが作成される
[crayon-66383338f24f4211704164/]

シーダー作成

[crayon-66383338f24f7744732695/]
database/seeders/ に作成されるので、初期値を設定する。
AdminTableSeeder.php
[crayon-66383338f24fc786801202/]
これだけでは実行されないので、database/seeders/DatabaseSeeder.php に
呼び出し部分を記述する。
DatabaseSeeder.php
[crayon-66383338f2500604854863/]

シーダー実行

[crayon-66383338f2504025130808/]
初期値が設定される。

キャッシュクリア

[crayon-66383338f2508744295786/]

パブリッシュ

[crayon-66383338f250c342494824/]
パッケージのビューがユーザ領域のビューにコピーされる。

認証クイックスタート

[crayon-66383338f250f276558980/]
認証関連がスカフォールドされる。

【Laravel 5.4】モデルのフィールドの暗号化・復号化

はじめに

最近いろいろ個人情報保護の観点から、DBに保存する特定フィールドは暗号化して欲しいとのニーズが多くなってきている。
しかも AESアルゴリズム を使えとか。 幸い Laravelの Cryptファサード は AES-256-CBC アルゴリズムなので、モデル側のセッター、ゲッターに機能を実装して、通常のアルゴリズムからは透過的に、DB保存の暗号化・復号化を実現する。

実装方法(アクセサ・ミューテタを使う(laravel推奨))

  1. まずは通常のモデルを作成する。
  2. Model 側に Name フィールド用のアクセサ・ミューテタを定義する。
  3. 暗号化、復号化を実装する。
Admin.php
[crayon-66383338f2964365599803/]

もちろんシーダー側も

シーダー側も予め暗号化しておく必要がある。
AdminTableSeeder.php
[crayon-66383338f296d262478881/]
こんな感じ。
ちなみに use Crypt; を有効にするとシーダーでエラーになる。
[crayon-66383338f2974430085222/]
これはシーダーが Global であるため。正解は Crypt を use しない。

その後の顛末

laravel の Crypt は同じ文字列であっても、暗号化のたびに暗号後の文字列が異なる。
つまり、入力された文字列を暗号化して比較しようとしても一致しない。
もちろん復号化すれば、復号前の文字列が異なっていても両方とも正しく暗号前文字列に戻る。 しかたないから、検索が必要なキーに対しては、暗号後の文字列が一致する自前の暗号化/復号化クラスを自作した。
Crypt ファサードのオプションでなんとかならんかね。