20210605のlaravelに関する記事は9件です。

Laravel6 Migration まとめ

はじめに Migrationは新規テーブルの作成、カラム追加など、DBの更新を行うための機能。 今回は使い方をもう一度整理するためにまとめた。 ※マイグレーションは①作成②実行の2段階に分けられる 作成は設計図を作る作業でそれを実行(migrate)しないとDBに反映されないので要注意! ファイルの作成・カラムの追加 $ php artisan make:migration create_{テーブル名}_table //マイグレーションファイル作成 $ php artisan make:migration add_{カラム名}_to_{追加先のテーブル名}_table //カラムの追加 (database/migrations)配下に作成される。 オプション $ php artisan make:migration create_users_table --create=users $ php artisan make:migration create_users_table --table=users --create、--tableのうしろに=でマイグレーションファイルで扱うテーブルの名前を引数として渡 すと、 出来上がるマイグレーションファイルはそのテーブル名を含んで雛形が作られる。 特別な理由がない限り付けておくのが無難か。(雛形と全く違うとか) Migration 実行 $ php artisan migrate このコマンドで実際にテーブルが作成される。 これしないと反映されませんからね! ロールバック Migrationした時に定義ミスを起こしてしまった時巻き戻しが可能。 # 最後に適用されたマイグレーションをロールバック $ php artisan migrate:rollback Migrationは確認することもできる。 ロールバックはやらかしがちなので落ち着いて行おう。 # migrationsテーブルの中身 mysql> SELECT * FROM migrations; +----+---------------------------------------------------+-------+ | id | migration | batch | +----+---------------------------------------------------+-------+ | 1 | 2016_12_19_000000_create_tables | 1 | | 2 | 2018_07_18_102240_add_column_mogumogu | 1 | | 3 | 2021_02_05_194658_create_hogehoge_table | 2 | +----+---------------------------------------------------+-------+ $ php artisan migrate:status //こちらのコマンドでも確認できるよ 新たにMigrationしたい時 再度Migtationしたいときはphp artisan migrateではだめです $ php artisan migrate:refresh $ php artisan migrate:fresh refreshはマイグレーションファイルの down メソッドを呼び出してテーブルの削除などを行ってからmigrateされます。rollback(巻き戻し)してから再実行する感じ。 freshはdownメソッド呼び出さずに、全テーブルをdropしてからmigrateがされます。 dropてのはまあ削除するってことですね。 しかしrefresh と fresh これをどう使い分けるのかが調べたが出てこない。。。 基本はfreshを使っているが、わかったら追記する。 分かる方いらっしゃいましたらコメントくださいませ。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

fromから送ったデータがうまくDBに入らない

fromから送ったデータがうまくDBに入らない原因 bladeファイル <form action="{{ route('posts.add') }}" method="POST"> <table> @csrf <tr> <th>タイトル</th> <td> <input type="text" name="title"> </td> </tr> <tr> <th>人数</th> <td>       //数字だけの入力にしたかったのでtype="number"を指定 <input type="number" name="member"> </td> </tr> <table> </form> コントローラー public function add(Request $request){ $param =[ 'title' => $request->title, 'member' => $request->member, ]; DB::table('posts')->insert($param); return redirect('/posts/index'); } データを送ろうとしたら下記のエラーが出た SQLSTATE [23502]: Non-null violation 翻訳すると「データがnullだから違反してるよ」的な感じだった。 多分....。 なぜNULLで送られる? 原因はDBにあった。 public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->integer('member'); }); } memmberカラムをintegerとしていたためエラーが起きた。 なのでbladeファイルのinputのtypeをtext変更 //numberからtextに変更 <input type="text" name="member"> するとうまくデータが送れた。 原因はまだわからないので明日調べる。 もっとDBを勉強するべきだな... 今日はここまで!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel5.8 環境変数はconfig経由で!

Laravelで環境変数を扱う際の注意点を学んだので記事として残しておきます。 要は、タイトルの通り、.envに格納した内容はconfig経由で使いましょうという話です。 今回は、ポートフォリオでGoogleMapsAPIを使用する機会があったので、APIキーの扱い方を例とします。 .envにAPIキーを格納 project/.env GOOGLE_MAP_API_KEY=https://maps.googleapis.com/maps/api/js?key=xxxxx configを経由する .envに保存した内容をまずconfig/services.phpで取得します。 env('.envファイルに記述したキー名')で取得する事ができます。 config/services.php 'google-map' => [ 'apikey' => env('GOOGLE_MAP_API_KEY'), ], なお、config/services.phpとは、外部のWebサービスのアカウント情報を設定しておく為に使うファイルだそうです。 その為、APIキーとかAWSのアクセスキーはconfig/services.phpを使って取得するようにしましょう。 BladeファイルでAPIキーを取得する GoogleMapsAPIを使う時は、GoogleMapを使いたい画面のBladeファイルでAPIキーを記述する必要があります。config/services.phpを経由して.envのAPIキーを引き出すには以下のように記述します。 xxx.blade.php <script src="{{ config('services.google-map.apikey') }}"></script> これで、 xxx.blade.php <script src="https://maps.googleapis.com/maps/api/js?key=xxxxx"></script> が再現できます。 まとめ BladeでAPIキーを使いたい。その為には.envに格納してenv('GOOGLE_MAP_API_KEY')とすれば良いんじゃね?とか思っていましたが、 こちらの記事によると、、 本番環境でconfig:cacheコマンドを実行した際、.envファイルを読み込まないから。 という理由で、直接env()を使用するのはNGだという事を学びました。 私も含めて初学者の方は基礎知識が甘い為、APIキーなどの取扱注意物に関する情報はしっかり調べた上で扱うようにしましょう!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel5.8で404エラー時の処理を実装する

Laravel5.8で404の例外処理を実装したので忘備録としてまとめます。 404エラー時に表示したい画面を作成 今回はviews/errors/404.blade.phpとします。 resources/views/errors/404.blade.php <h1>404 Not Found.<br>このページは存在しません。</h1> <p>あなたがアクセスしようとしたページは削除されたかURLが変更されています。</p> ※本来はユーザーの離脱率を下げるため、TOPページへのリンクや、サイト内検索フォームを設置する等の工夫があるのが理想です。その辺の話はこちらの記事を参考に。 Handler.phpの編集 例外処理はHandler.phpを編集することでカスタマイズ出来ます。 基本的にはこちらの記事を参考に実装していきましたが、エラーが出てしまって色々試行錯誤した結果、以下のように記述して解決しました。 app/Exceptions/Handler.php namespace App\Exceptions; use Exception; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Request; use Response; use Illuminate\Auth\AuthenticationException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; //①追加 //途中略 public function render($request, Exception $exception) { //②ここから if ($exception instanceof NotFoundHttpException) { return response()->view('errors.404'); } //②ここまで追加 return parent::render($request, $exception); } 参考記事から修正した点としては、 ・①でクラスを指定する必要がある。(他にNotFoundHttpExceptionクラスが存在しているのか?原因はわかりませんが、これを記述しないとエラーが発生してしまいました。) ・②のresponse()->view('errors.404')の部分。 参考記事ではreturn view('errors.404')となっていましたが、Laravel5.8 公式ドキュメントを確認するとresponse()->view()で書けよ!と言う事だったので、公式に従って修正したら上手くいきました。 今回は404エラーの例外処理のみの解説となりましたが、他の例外処理についても調べて実装できるようになりたいと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

信用するプロキシの設定【Laravel】

何が書いてあるか分からない… 説明の意味が分からない… https://readouble.com/laravel/5.5/ja/requests.html#configuring-trusted-proxiesにて ≪分からない単語辞書≫ ロードバランサ: サービスが止まらないようにサーバーを振り分ける。 中でも、ラウンドロビンは、分散対象のサーバー全てに均等に振り分けをします。 トラフィック: インターネットやLANなどのコンピューターなどの通信回線において、一定時間内にネットワーク上で転送されるデータ量のこと。 (https://www.idcf.jp/words/traffic.htmlより) フォワーディング: ネットワーク上で、あらかじめ指定された条件や設定などに基づいて、外部から受信したデータを特定の宛先へ自動的に転送する機能。 イメージは、宅配さんが自分の地区で住所をたどり、荷物を送り届ける。 セキュア: 一般的に、コンピュータがセキュアな状態である、と形容される場合、暗号化方式を利用して通信の盗聴や改竄を防止したり、認証方式を利用してなりすましを防止したり、脆弱性・セキュリティホールの検出ツール、あるいはファイヤーウォールなどを利用して不正アクセスを防止したり、といった対策が適切に講じられている状態を指す。 (https://www.weblio.jp/content/ より) プロキシ(webプロキシ) 日本語に訳すと「代理」や「中継」を意味します。つまり、WEBプロキシサーバとはインターネットに代理接続しアクセスするサーバのことを指します。 (https://www.amiya.co.jp/column/web_proxy_20200911.html#i より) 以上つらつらと書きましたが、私はAWSを利用しているので、 こちらを行います。(vfs connectionエラーの予防) ≪分からない単語辞書≫ プロバイダ: 単にプロバイダといった場合は、通信回線を通じて加入者にインターネットへの接続・中継サービスを提供する「インターネットサービスプロバイダ」(ISP:Internet Service Provider)のことを指す場合が多い。 (https://e-words.jp/w/%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80.html より)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel・レイアウトファイルの流れ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

HttpとHttpsの違い

Https SSLによって暗号化されたサイト(ポート番号443番) Http SLLによって暗号化されていないサイト(ポート番号80番) SSLとは インターネット上におけるWebブラウザとWebウェブサーバ間でのデータの通信を暗号化し、送受信させる仕組みのことです。 インターネット上で頻繁に送受信される氏名・住所・メールアドレスなどの個人情報や、ショッピングの決済に必要なクレジットカード情報、ログインに必要なID・パスワードといった情報は、常に悪意ある第三者から狙われております。 SSLは、これらの重要な情報を、悪意ある第三者による盗聴を防いだり、送信される重要な情報の改ざんを防ぐ役割を持っています。 (https://jp.globalsign.com/ssl-pki-info/ssl_beginner/aboutssl.html#aboutssl より) ポート番号とは TCP/IP通信において、コンピュータが通信に使用するプログラムを識別するための番号です。ポート番号は16ビットの整数であり、0番~65535番まであります。 TCP/IP通信においては、IPアドレスがあればネットワーク上のコンピュータを一意に識別することができますが、該当コンピュータのどのプログラムに通信パケットを届けるかは、IPアドレスだけでは決定できません。どのプログラムに通信パケットを渡すのかを決定するために、ポート番号を使用します。 (https://www.nic.ad.jp/ja/basics/terms/port-number.html より) おまけ学習 リンクの後に#id名をつけるとページ内のidに飛べる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravel バージョンを確認するコマンド

目的 laravelのバージョンを確認するコマンドを紹介する 方法 $ php artisanコマンドを実行できるディレクトリに移動して下記コマンドを実行する。 $ php artisan -V
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

webpush:vapidでのopenssl_pkey_new()のエラー

プログラミング初心者です。 WebPushをLaravel(5.8)で実装したい過程で、 php artisan webpush:vapid 実行したら ErrorException : openssl_pkey_new(): private key length is too short; it needs to be at least 384 bits, not 0 vendor/web-token/jwt-core/Util/ECKey.php:157 $key = openssl_pkey_new([ 156| 'curve_name' => self::getOpensslCurveName($curve), > 157| 'private_key_type' => OPENSSL_KEYTYPE_EC, 158| ]); というエラーが出ました。 エラー文検索しても解決できず、メンターさんと1時間以上格闘しましたが、それでも解決できませんでした。 「メンターさんが解決できなかったら私にできるわけないだろうと」諦めかけてました。 でもvapid作成できなきゃ進まないため、検索してったらこのサイトを見つけました。 bitsが関係してるだろうから、エラーが出てる場所のECKey.phpの$key = openssl_pkey_new([]);の[ ]中にこれを入力してみたら・・・ "private_key_bits" => 2048, まさかの VAPID keys set successfully. 衝撃すぎて、体が飛び起きました。 ちなみにマニュアルサイトにある OPENSSL_KEYTYPE_RSAではダメでOPENSSL_KEYTYPE_ECじゃないと ErrorException : Undefined index: ec というエラーが出ちゃいました。返されるキーのデータが違うみたいですよ(正直違いよくわかりません)。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む