- 投稿日:2020-11-19T23:29:33+09:00
[Laravel] コードをコミット時に自動整形する
やりたいこと
複数人で開発時に、フォーマットを統一したい。
自動整形するやつ入れても実行し忘れるので、コミットのタイミングで何も考えることなく整形できるようにしたい。やりかた
brainmaestro/composer-git-hooks
というパッケージを使うと、git hook(gitの特定タイミングで色々できる
)を簡単に使えるそして
friendsofphp/php-cs-fixer
を使うと、コードの規約違反を指摘/修正してくれるまずはインストール
composer require --dev brainmaestro/composer-git-hooks composer require --dev friendsofphp/php-cs-fixerつぎに設定
composer.json
のextra
に"hooks"
を追加
pre-commit
をフックに、php-cs-fixer
を使って自動フォーマットする。composer.json"extra": { "laravel": { "dont-discover": [] }, "hooks": { "pre-commit": [ "./vendor/bin/php-cs-fixer fix .", "git add ." ] } },反映して完了。
./vendor/bin/cghooks update
- 投稿日:2020-11-19T22:20:59+09:00
laravelで画像を再度指定せずに編集可能な機能を作成
初投稿です。これからプログラミング学習のアウトプット始めていこうと思います。
世の中のサイト(主にSNS)ってユーザーアカウントにアイコン(画像)が設定可能ですよね。
それを編集するときアイコン以外(名前、プロフィール等)だけ編集してアイコンはいじらない場合、アイコン画像はそのまま変更なしでプロフィールの変更ができます。
でも自分でlaravelでサイトを作ってみて気づいたのが画像に対してはoldヘルパーが適用されずどうやったらその機能を実現できるのかという点です。今回自分なりに思いついた実装方法を紹介していきます。
ルーティング
web.phpRoute::get('/posts/edit/{post}', 'PostsController@edit');暗黙の結合を使って編集ページにpostsテーブルからカラムを持っていきます
今回画像のカラム名はpathになります。if文を使って実装できた
PostsController@editpublic function update(Request $request, Post $post) { // 画像変更の確認 if(!empty($request->path)) { $file = $request->file('path'); $filename = $file->getClientOriginalName(); $request->file('path')->storeAs('public',$filename); $post->path = '/storage/' . $filename; }else { $post->path = $post->path; }編集ページのsubmitボタンが押されたとき、$request->pathがあれば(新たに画像が挿入されているなら)新たに画像に対してユニークな名前をつけそれを投稿の画像としてデータベースに登録、そうでないならば(画像が変更されていないなら)以前の画像のパスを再代入してデータベースに登録
これで実装ができました!普段使い慣れているサービスの機能を実装できると気持ちがいいですね
- 投稿日:2020-11-19T18:35:54+09:00
複数のLaravelアプリを任意のデータベースに接続する方法
はじめに
Laravelでの開発で、最初のサンプルアプリはつくってみた。
次は本格的にアプリケーションを作ってみたいけど
最初に使ったDBとは別のDBに接続してテーブル作りたい。
そんな時に試行錯誤した設定方法を備忘録として残します。
誰かの参考になれば幸いです。*1〜3の手順は初めてLaravelを使用する際にも通る工程です。
開発環境
MAC
VirtualBox
Homestead
vagrant 2.2.9
PHP 7.3.11
Laravel 5.5.481.Laravelのダウンロード
composerで新規のLaravelをインストールしていきます。
ターミナルを開いてHomesteadが置いてあるディレクトリまで移動します。
移動したら以下を打ち込んでください。
composer create-project laravel/laravel Laravel_new
Laravel_new
の部分はファイル名にあたります。任意のプロジェクトファイル名に変更してください。
ディレクトリ構造は
Laravel
|- Homestead
|- Laravel_sample
|- Laravel_new
となります。2.Homestead.yamlを編集する
~~省略 folders: //↓最初に設定したパス - map: /Users/ユーザー名/Laravel to: /home/vagrant/code //↓追加するパス 同じディレクトリなので設定する必要ないかもしれませんが一応いれておきます - map: /Users/ユーザー名/Laravel to: /home/vagrant/code sites: //↓最初に設定したパス - map: laravel.sample to: /home/vagrant/code/laravel_sample/public //↓追加するパス - map: laravel.new //ドメイン名になる。基本なんでもOKだけど全部小文字で! to: /home/vagrant/code/laravel_new/public databases: - homestead //↓使用したいデータベース名を設定します。これも何でもOK。2つ目のLaravelアプリで使用するテーブルがこのデータベースに入ります。 - laraveldb ~~省略2.hostsファイルにドメインを追加
hostsファイルは自身のPCに最初から入っているファイルです。
「hosts」で検索するとectというフォルダの中に入ってると思います。
先ほどのHomestead.yamlに追加したドメイン名と同じものを、このhostsファイルにも追記します。
必ず半角スペースをあけて追記しましょう。## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost 192.168.10.10 laravel.sample laravel.new ←これ注意点として、このhostsファイルはPC上の大事なファイルなので変更できないようになっています。
一度、デスクトップなどに移動させてから変更し、終わったら元の場所に戻すというやり方で変更できます。3.envファイルの設定
.envファイルに、今回のlaravel.newで使用するMySQLのデータベースにアクセスできるよう、設定を追加します。
~省略~ ↓もともとあったもの DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=*** ↓laravel.newのために追加するもの DB_CONNECTION_NEW=laravelnew DB_HOST_NEW=127.0.0.1 DB_PORT_NEW=3306 DB_DATABASE_NEW=laraveldb DB_USERNAME_NEW=root DB_PASSWORD_NEW=*** ~省略~末尾に追加した
_NEW
は区別するために加えたものです。
DB_DATABASE_NEW
はHomestead.yaml
のdatabases:
で設定した名前の通り指定します。
usernameとpasswordは自身のものを指定してください。今回は*で伏せています。4.database.phpの設定
Laravelのセットに入っているdatabase.phpに設定を追記します。
configフォルダに入っています。'laravelnew' => [ 'driver' => 'mysql', 'host' => env('DB_HOST_NEW', '127.0.0.1'), 'port' => env('DB_PORT_NEW', '3306'), 'database' => env('DB_DATABASE_NEW', 'laraveldb'), 'username' => env('DB_USERNAME_NEW', 'root'), 'password' => env('DB_PASSWORD_NEW', '***'), 'unix_socket' => env('DB_SOCKET_NEW', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ],変更箇所のみ抜粋しています。
追記が終わったら、一番上のdefaultも変更しておきましょう。
laravelnew
とは、前工程で編集したenvファイルのDB_CONNECTION_NEW
に設定したものです。'default' => env('DB_CONNECTION_NEW', 'laravelnew'),DB_CONNECTION名は、「この設定で指定した通りのものを使います!」という合言葉のようなもの(と認識しております。)です。違ったらご指摘いただけると幸いです…。
例えば、この先シーディングファイルにテーブルの初期値を入れることになるかと思いますが、その時に
DB::connection('laravelnew')->table('users')->insert([...])
とすると、database.phpに追記したデータベースに入れてくれます。
(defaultに設定しておけばこの手順は省けるはずなんですが、なぜか私の場合は使いたいデータベースに接続できず、最初に使用していたデータベースにシーディングされてしまいました…)5.設定の反映
ここまでできたら、今までの設定を反映させます。
database.phpなどの設定ファイルをいじった後は仮想OSを再起動しないと反映されません!
vagrant reload --provision
をターミナルに打ち込んでください。6.最終確認
これで設定は完了したはずですが、このまますぐにmaigrateしたりseedするのはちょっと怖いので
本当に設定できているか確認しましょう。
tinkerを使います。
vagrant ssh
でssh接続します。
cd
で自身のプロジェクトファイルまで潜って(今回はlaravel_new)
php artisan tinker
と叩きます。
以下は実行した処理内容です。vagrant@homestead:~/code/laravel_new $ php artisan tinker Psy Shell v0.9.12 (PHP 7.4.5 — cli) by Justin Hileman >>> config('database.default') => "laravelnew" >>> config('database.connections.laravelnew') => [ "driver" => "mysql", "host" => "127.0.0.1", "port" => "3306", "database" => "laraveldb", "username" => "root", "password" => "***", "unix_socket" => "", "charset" => "utf8mb4", "collation" => "utf8mb4_unicode_ci", "prefix" => "", "strict" => true, "engine" => null, ] >>>
config('database.default')
でdatabase.phpでデフォルトに設定したコネクション名がでてきます。
次に、config('database.connections.laravelnew')
で、database.phpに設定した内容が走ります。これで先ほど設定した内容がうまいこといってることが確認できました!
安心してマイグレーション、シーディングができますね。ちなみに実際にマイグレーションするときに
php artisan migrate --database=laravelnew
とすると確実にlaravelnewで使用したいデータベースに接続できるはずです。心配な方はやってみるといいと思います!
以上で任意のデータベースに接続する方法は終了です。
次回はできあがったアプリをHerokuにデプロイするまでの工程を記事にしたいと思います!この記事の内容に、間違っている点、もっとこうした方がいいという点などありましたらコメントいただけると幸いです。