Tag Notelaravelpage2を表示しています。
2018.1.14 日
Laravelに限らずチェックボックスという複数選択部分の処理は何かと面倒です。フレームワークといえどもここは面倒なので、そこそこの方法論をまとめておきます。 チェックボックスのどれか一つを選択した状態を正とする チェックボックスがあってどれか一つを選択してほしくて、全部空だった場合はエラーにするというやつです。 required_without_all:foo,bar,... こいつが使えそうです。この関数は指定したnameがどれか一つ選択していなければならないというやつです。プルダウンやラジオボタンは複数の中から一つだけ選択するので普通のrequiredでこと足りるのですが、nameがそれぞれ別になってしまった場合はrequired_without_allを使います。 Laravel 5...
2018.1.5 金
Laravelのmiddlewareの使いどころは、デフォルトの機能でAuthがあるようにそんなようなところが使い所かと思います。デフォルトでは以下のような機能が備わっています。 メンテナンスモードかどうか判断するミドルウェア Cookieの暗号化/復号化処理を行う機能 指定されたCookieをResponseヘッダに登録する機能 Sessionの生成や取得などを行う機能 Sessionに保存されたエラー情報をViewにセットする機能 CSRFを防ぐためのトークンの発行やチェックを行う機能 Route Model Binding を実行する機能 (Laravel5.3から追加) [Laravel]ミドルウェアを整理してLaravelを軽くする ここらの機能は、 app/Http/Middle...
2017.11.18 土
Laravel5のテンプレートエンジンはかつてのSmartyとかと比べると各所やたらと優れています。 かつてhtmlコーディングといえばインクルードだったわけですが、bladeの場合は継承が基本です。インクルードもできますが、大本の雛形を継承するというのがベスト・プラクティスです。 またコードが汚くなることを覚悟でPHPを直接書くこともできます。 https://readouble.com/laravel/5.5/ja/blade.html 継承 (extends) 雛形になるHTMLをapp.blade.phpとして作成して各ページで以下のように継承します。 @extends('layouts.app') セクション(section) 各ページでは@sectionでそれぞれのページごとにコ...
2017.10.19 木
Laravelは舶来品なので日本語にはデフォルトで対応していないので日本語入力に関連するバリデーションがないのです。ここではひらがな入力のみを受け付けるバリデーションのカスタマイズをしてみます。 Laravelの自前のバリデーション機能はとても良くできているのでこれを継承して使うのがベストです。いろんなやり方がありますが今回はサービスプロバイダーを作成してどこでも使えるようにしておきます。 Laravel5.5 php7.1 artisanでプロバイダー作成 artisanコマンドでプロバイダーを作成します。 php artisan make:provider ValidatorServiceProvider app/Providers/ValidatorServiceProvider.ph...
2017.9.29 金
通常の文字列のポストは普通にできるんですが、ファイルのアップロードはちょっと特殊(便利)です。というのはLaravelにはFILE_SYSTEMとかstrageというものがあって、別ホストの領域をLaravelの中に取り込めるという仕組みがあります。つまりアップロードしたファイルは大容量ストレージ(S3とか)にアップロードできてしまうわけです。 なので、生PHPに慣れ親しんだファイルアップロードとはおよそ扱いがちがっているということになっています。 画像が保存される場所の確保 アップロードファイルが保存される領域を設定します。Laravelのこのシステムはとても便利でこのストレージ領域をS3などに設定することが可能になってます。NFSファイルマウントをこの領域に設定しちゃうとかいろいろできま...
2017.9.24 日
例によってフロントコントローラは非常に簡素。むしろ何もしていない。 app/Http/Controllers/Auth/ForgotPasswordController.php むしろこいつが全部やってます。 vendor/laravel/framework/src/Illuminate/Foundation/Auth/SendsPasswordResetEmails.php こっから先はファサードとサポートの嵐で正直ソース追うのがつらいので、独自クラスでやった方がよさそうです。 パスワードリセットメールを日本語にする 新規で通知クラスを作成します。Laravel 5.5 通知 php artisan make:notification JaPasswordReset app/Notific...
2017.9.23 土
auth.failedというバリデーションエラー(というかログイン認証のエラー)時だけvendorの中でべた書きになっているのでが嫌ですね。なんでvalidation.phpに書いてくれてないんですかね。 日本語に修正するには、 vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php のエラー文言を日本語にしてあげます。 protected function sendFailedLoginResponse(Request $request) { throw ValidationException::withMessages([ $this->username() => [tran...
2017.9.22 金
ざっくりとログインの仕組みを見てみました。認証機能についてはこちらをご覧ください。 ログイン時の条件 以下のURIからユーザー名(Eメール)とパスワードを入力すると、 /login 実際にログインの手続きを行っているのは、 Illuminate\Foundation\Auth\AuthenticatesUsers; (vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php) というところです。ログインしているのかしてないのかを判断してくれるところです。 実際のログイン時の関数はここですね。 protected function credentials(Request $request) { ...
2017.9.16 土
実際につくるコマンドは、 php artisan foo:bar fooobaaar みたいなことで実行できるコマンドをつくります。取り急ぎここではechoするだけです。 artisanのコマンドクラスを作成する php artisan make:command foobar app/Console/Commands/foobar.phpが作成されます。これがコマンドを実行する際に読み込まれるクラスになります。 コマンドの詳細記述 app/Console/Commands/foobar.phpを開いて、修正変更します。 コマンド名 実際のコマンドは$signatureに設定します。これがすなわちコマンドになります。 protected $signature = 'foo:bar'; arti...
2017.9.14 木
どう考えても足りないカラムとプレフィックスのないテーブルはきついので改変します。 テーブル名の変更 元々あるAuthの機能は勿体無いので使うとして、テーブル名を他と統制が取れるように変更します。変更するというより新規で作成してAuth用のテーブルにしてしまう感じです。 artisanコマンドでマイグレーションを実行します。面倒なのでモデルも作成します。 php artisan make:model MODELNAME --m ちなみにここではモデルを作成するついでにマイグレーションファイルの作成ということなのでモデル名(単数形)を指定します。 app/uo_user.php database/migrations/2017_09_12_155108_create_uo_users_table...
2017.9.9 土
Laravelのバージョン確認 $ php artisan --version Laravel Framework 5.5.2 PHPのバージョン確認 $ php -v PHP 7.1.4 (cli) (built: May 10 2017 16:03:28) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
2017.8.2 水
基本事項 .env以外はすべてのファイルが環境依存しないようにすべてパラメータで制御すべし。 vendor以下は触らない。もし修正変更したいことがある場合はtraitをオーバーライドすべし。 vendorはcomposerで管理すること。(Gitでは管理しない) 独自の共通class、共通traitはapp以下にもつべし。(vendor以下にもつことができれば尚よし。) 新しい機能は自分で作らず、Packagistを検索すべし。 やりたくなるけど抑えよう! $_POST,$_GET,$_SESSIONなどスーパーグローバル変数は使ってはいけない。(デバック時の参照ぐらいに使うべし) 思わずフロントコントローラに全部書いちゃうのはNG。後から使いまわせるように抽象度の高いコードを書いてAuto...
2017.7.29 土
Laravelにって話しではなくてComposerの使い方という話しになるかと思います。Composerのインストールは、ComposerでLaravelインストールはここらで見てみてください。 基本的にはcomposer.jsonにパッケージ名を追加するだけということになります。 https://packagist.org/ 最近のプログラマーは自分で何も書かなくていいんじゃないかというぐらい、いろんなパッケージがあります。ダウンロード数が多いものが人気?ということになるんでしょうか。殆ど外人さんなのでちょっとは英語読めないとつらいです。とはいえトップページにパッケージを使う方法と、自分で開発したものをpushする方法がすでに書いてあるので、ということになってます。そんなに難しくない。 検...
2017.7.28 金
[Illuminate\Database\QueryException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email)) [PDOException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes こちらにきちんと書かれて...
2017.7.5 水
LaravelのデフォルトのAuth機能を入れてみてから とはいえLaravelはデフォルトでそこそこの機能を実装しているのでいたずらにカスタマイズしてももったいないことになるので、ここでは新規登録時にもうちょっと必要な情報も登録できるようにしてみようということをやってみます。ここまでやっている前提となります。デフォルトの認証テーブルになるusersは以下のようになっています。 $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $ta...
2017.6.27 火
以前にちょっと記事を書いたのですが、5.4でもう一度復習です。ここら辺りはアプリケーションのコアになるので勉強していた方がよいかと思います。 とはいえ認証機能は結構厄介です。というのも選択肢がたくさんあるのと自由にカスタマイズが出来すぎてしまうので、後から保守する人は本当に大変です。 Laravelは非常に便利なコマンドartisanがあるのですが、便利すぎていろいろなことを一度にやってしまうことからGitなどでこまめに見ておくのがおすすめの開発方法です。 認証機能の準備 とりいそぎ認証機能の雛形をartisanで作ります。 (※まだデータベースのマイグレーションを行っていないひとは、Laravel5 モデルとマイグレーションを参考にしてマイグレーションを行ってください。「php artis...
2017.6.20 火
resources/views/errors/STATUS.blade.phpをつくってあげるとそのまま表示してくれるという便利なLaravelです。404は当然、500と403はいつも普通に使うとして419はというとLaravelのCSRFトークンのセッション切れの際に飛ばされるステータスです。 resources/views/errors/403.blade.php resources/views/errors/404.blade.php resources/views/errors/419.blade.php resources/views/errors/500.blade.php 500の表示は本番モードみたいなやつにしないと駄目で、デフォルトではデバックモードになっています。まずは...
2017.6.20 火
リクエストから取るのがいいのかなと思ってます。少なくともスパーグローバル変数は使わない方がよいという感じでしょうか。 public function sample(Request $request) { $request->session()->get("key"); // 取得 $request->session()->put("key", "value"); // 保存 $request->session()->forget("key"); // 削除 $request->session()->flush(); // 削除 $request->session()->flash("key", "value"); // 一時保存(フ...
2017.6.11 日
SMTPサーバの設定 Laravelからメール送信するには、.envで送信メールサーバの設定をしておきます。phpのsendmail(mb_sendmailかな。)を使う場合は、MAIL_DRIVERをmailで設定します。 ここではGmailのSMTPを使った設定をします。自分のGmailアカウントに合わせて設定しておきます。 # .env MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=xxxxxx@gmail.com MAIL_PASSWORD=xxxxxxxxxxxxxxx MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=from@example.com MAIL_...
2017.6.11 日
デフォルトでもSymfonyのデバッカーみたいなものがありますがあんまり詳細な情報が出ないので、Laravel専用のデバッカーを入れてみます。 (デバッカーでいうとCake3はデバッカーだけは強力だったと思う。) github: /barryvdh/laravel-debugbar packagist: /barryvdh/laravel-debugbar Composerでインストール php composer.phar require barryvdh/laravel-debugbar --dev インストール時の最後に最適化までやってくる。 composer install これで入ったっぽい。composer.jsonとcomposer.lockにいろいろ追加されます。 あれ?Lar...
2017.6.3 土
Laravelの開発時にpullしたりすると動かないときがあります。キャッシュ消したりいろいろやるわけですが、新しく追加したクラスなどなどうまいこと登録されていないことがあるので最適化してやらないとダメなときがあります。 デプロイ時にも同じような処理をしてあげるといいです。 最適化・高速化? // Laaravelのディレクトリに移動して.... php composer.phar dump-autoload php artisan clear-compiled php artisan optimize 各種キャッシュのクリア php artisan config:cache php artisan route:cache php artisan view:clear php artisan...
2017.5.28 日
プログラマが最も面倒臭がるところです。実際実装していてあまりおもしろいところじゃない。 いちばんわかりやすいやり方は、入力されたPOST値のバリデーションはPOST値をうけるコントローラで行います。 バリデーションの実装 POST値をうけるコントローラの最初あたりでやるのがよいかと思います。save()とかする手前とか。 public function complete(Request $request) { // do to validate $this->validate($request, [ 'Email' => 'required|email', 'Password' => 'required|min:4', ]); .... } $request->input(...
2017.5.25 木
Laravel5 モデルとマイグレーションで基本的な設定はできると仮定して今度はSQLでいろいろやります。厳密にいうとSQLじゃなくてEloquentというORMを使います。Doctorinと比べると使いやすいかもです。 コントローラでモデルを使う 復習になりますがコントローラでモデルを使うには、まずはモデルをuseしないといけません。 use App\[MODEL_NAME]; ファイル自体は、app/[MODEL_NAME].phpにあります。 これをやっておくと、 $obj = new [MODEL_NAME]; でもって簡単にnewできます。useしない場合は直接newしても大丈夫みたいです。 $obj = new App\[MODEL_NAME]; Insert insertはin...
2017.5.12 金
全般 PHP Parse error: syntax error, unexpected ‘.’, expecting ‘&’ or variable (T_VARIABLE) in インストールしたてのときとか、Git cloneしたてのときによく出てくるんですが、面倒なので再インストールすると直ったりします。 同じような現象で、 Parse error: syntax error, unexpected '?' in ... というのもPHPが古かったりするのが原因かもです。 .envを読み込まない なかなか根幹なところでびっくりしますが、キャッシュ消すと大抵治るっぽいです。 rm -f bootstrap/cache/config...
2017.5.10 水
ちょっと古い記事ですが、Laravelでマイグレーション後にモデル作成してもデータが登録ができないというのがあって私のハマりどころとかなり似ているなという感じだったのですが、私の場合エラーも出なかったので、かなり苦戦しました。 初期化してみる 値をDBに登録する際に、取得したオブジェクトに値を入れて$xxx->save();で保存するだけですが全然インサートされず、おまけにエラーにすらならないということなので、とりあえずすべて初期化してみました。 マイグレーションで作成したテーブルをDBから削除。 まずはmigrationsテーブルの内容を削除(すでに運用中だったらこれはなかなか出来ないかもですが。。)それから、migrationsファイルをデフォルトのものだけ残して削除。(以下だけ残す) ...
2017.5.7 日
Formから何らかの情報を取り入れてDBに格納、メール送信といったところが基本的な機能になるかと思います。Frontから攻める方法とDBから攻める方法が(私個人としては)あるのですが、コントローラーから攻める方法は他の機能とのからみができてからと思うので、ここではDBまわりから順番に作成してゆきます。 設計 マイグレーションとモデル コントローラとビュー Formの設計 入力項目に加えて、データを保存する形式を踏まえて設計します。とはいえLaravelではartisanコマンドである程度必要なものを揃えてくれます。 テーブル名は無難に「ContactUser」にしておきましょう。データの保存項目は以下のようにします。 カラム名 データ型 内容 id increments ID last_na...
2017.5.3 水
WEBサーバーの冗長化にともなってMemcachedやRedisでセッション管理が人気ですが、ここではDBでセッション管理をする方法です。Laravelはとても簡単に設定できました。(少なくともCakePHP3よりかなり簡単に設定できます。) もともとartisanにDBのセッション管理のマイグレーションが設定されているので、.envのパラメータを1つ変更してマイグレーションを行うだけです。 Laravelはデフォルトではセッションドライバーはfileでセットされています。セッションを活性化させるとstrage/framework/session/*に各セッションファイルが生成されます。これをDBにインサートして管理します。 .envの設定 セッションドライバーをdatabaseに設定します...
2017.5.1 月
共通クラスの作成 なんかむかしincludeしてた時代ありましたね。今もしてますが。Laravel5ではLaravel4とちょっとやり方違うみたいです。手順としては、 共通関数をつくる。 Composer.jsonに登録する。 コマンドでオートローダーに反映。 config/app.phpにエイリアスとして追加。 クラス名::メソッド名()で呼び出す。 結構めんどうくさい感じがしたけど、筋が通っていてつかいやすいです。 共通関数をつくる 共通関数はどこにつくっても大丈夫です。過去の例にならいつつapp/Library/BaseClass.phpとして作成したいと思います。ディレクトリとファイルを手で作成します。artisanでなんかできるかなと思ったけど、なんかコマンドはないっぽい。 こんな...
2017.4.30 日
PHPフレームワークのPOST値は結局はPHPなのでスーパーグローバル変数としての$_POSTで受け取れるのですが、これで受け取らないというのが普通です。$_POSTで受け取っちゃうとあんまりよろしくないことになりかねないのでできるだけフレームワークの規約に従うのがよいです。 Laravel 5.4 HTTPリクエスト LaravelのPOST とはいえいろいろな方法で取得できるのもこれまた事実です。私個人としてはDependency Injection (DI)でいろいろやるのがLaravelらしいと思います。 Input (Facade) Request (Facade/DI) FormRequest (DI) Formの設計 ここでは全体の流れだけで把握したいので簡素なものにしておきま...
2017.4.26 水
テーブルを作成する データベーステーブルの作成と管理、モデルとがいっかんして管理できるというのがいいところ。舶来品のLaravelは、model名が単数形(キャメルケース)、テーブル名が複数形(スネークケース)となります。 ここでは以下のように作成します。 term name table名 data_projects model名 DataProject model file app/DataProject.php migration file database/migrations/yyyy_mm_dd_hhiiss_create_data_projects_table.php モデルを作成する Laravel5の解説書にはモデルとマイグレーションは別々に作成することになっていますが、どっ...