--> -->
これは、2018アドベントカレンダー記事で、Laravel(5.4)を使った開発の中で気づいた事を毎日一つメモしていくものです。
開発を進めていくと、routeの記述がどうしても長大になりがちな中で、resource定義は一行で複数の挙動が定義できて、しかもroute名も自動で定義してくれてとても助かります。
しかし、例えば以下のように別々のディレクトリ内で同じ定義名を使いたい場合があります。
1 2 |
|
この場合、route名はどちらも「regist.index」等となってしまい、別々に識別することができなくなってしまいます。
この問題の解決方法として、マニュアルでは以下のように再定義できると書かれています。
1 2 3 |
|
しかし、アクションがindex,create,store,show,edit,update,destroyと7つもあるのに、いちいち書いていたらroute定義が無駄に長くなってしまいます。 そこで、resource()のソースを確認すると、Illuminate\Routing\ResourceRegistrar::getResourceRouteName()で以下のように作成していました。
1 2 3 4 5 6 7 8 |
|
stringも許可しています。なので、以下の通り指定すると7つのアクション全てを書き換えてくれます。
1 2 |
|
便利(^^)
LaravelではAPIアクセスはapi.phpで定義できますが、ステートレスなアクセスを前提としているため、セッションを使うことができません。*1
参考ページの通りに対応すればセッションが有効になりますが、以下の手順で操作した場合にCSRFエラーになります。
想像ですが、APIアクセス時にセッション保持しているCSRFトークンが書き換わってしまい、フォームに埋め込まれたトークンと一致しなくなってしまうと考えられます。
私の場合はやむなく無認証にしましたが、どうしても認証したい場合は、アクセストークン方式にする必要があるのではないかと思います。
以下のコードにおいて、php5とphp7で挙動の違いがありました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
>php test.php test! test2
>php test.php test! PHP Notice: Array to string conversion in F:\test.php on line 8 PHP Stack trace: PHP 1. {main}() F:\test.php:0 PHP 2. test->__construct() F:\test.php:17 : PHP Fatal error: Uncaught Error: Function name must be a string in F:\test.php:8どうやら変数が配列の場合、php7だと「$this->$method」で一旦区切って解釈するようです。
- $this->$method[0](); + $this->{$method[0]}();これでphp5でも7でも動作するコードになりました。
WYSWYGはWhat You See What You Getの略で、直訳すると見たままの物が得られる、という意味です。
そんなの当たり前じゃん、と言っているそこの若者! これが誕生した頃は画期的だったのですよ(Appleが広めた)。
まあそんなことはいいとして、フリーで使えるWYSWYGエディタは各種あります。*2
私が試したのはTrumbowyg。簡単にこんなTEXTAREAが得られます。
使い方はこんな感じ。
1 2 3 4 5 6 7 8 9 |
|
(スクショはプラグインを幾つか入れてます)
このエディタ、画面上に得るべき物を表示しているということは、HTMLタグをレンダリングしているということになります。このTrumbowygは生HTMLも書けるので、試しにJavascriptタグを埋めてみます。
そして生HTMLモードを解除してみると・・・
うーん、ダメだこりゃ。これではユーザーが自由にこのサーバー上でJavascriptを動かせちゃうということです。
生HTMLは書けないモードにして使う必要がありそうです。
Trumbowygはボタンのカスタマイズができますので、例えばこんな感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
参考ページ: https://qiita.com/pinekta/items/d10c8374b1a3003cd952
https://engineer.blog.lancers.jp/2017/12/wysiwyg_editor_best_7/