20201119のlaravelに関する記事は3件です。

[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.jsonextra"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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravelで画像を再度指定せずに編集可能な機能を作成

初投稿です。これからプログラミング学習のアウトプット始めていこうと思います。

世の中のサイト(主にSNS)ってユーザーアカウントにアイコン(画像)が設定可能ですよね。
それを編集するときアイコン以外(名前、プロフィール等)だけ編集してアイコンはいじらない場合、アイコン画像はそのまま変更なしでプロフィールの変更ができます。
でも自分でlaravelでサイトを作ってみて気づいたのが画像に対してはoldヘルパーが適用されずどうやったらその機能を実現できるのかという点です。

今回自分なりに思いついた実装方法を紹介していきます。

ルーティング

web.php
Route::get('/posts/edit/{post}', 'PostsController@edit');

暗黙の結合を使って編集ページにpostsテーブルからカラムを持っていきます
今回画像のカラム名はpathになります。

if文を使って実装できた

PostsController@edit
 public 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があれば(新たに画像が挿入されているなら)新たに画像に対してユニークな名前をつけそれを投稿の画像としてデータベースに登録、そうでないならば(画像が変更されていないなら)以前の画像のパスを再代入してデータベースに登録

これで実装ができました!普段使い慣れているサービスの機能を実装できると気持ちがいいですね:relaxed:

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

複数のLaravelアプリを任意のデータベースに接続する方法

はじめに

Laravelでの開発で、最初のサンプルアプリはつくってみた。
次は本格的にアプリケーションを作ってみたいけど
最初に使ったDBとは別のDBに接続してテーブル作りたい。
そんな時に試行錯誤した設定方法を備忘録として残します。
誰かの参考になれば幸いです。

*1〜3の手順は初めてLaravelを使用する際にも通る工程です。

開発環境
MAC
VirtualBox
Homestead
vagrant 2.2.9
PHP 7.3.11
Laravel 5.5.48

1.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_NEWHomestead.yamldatabases:で設定した名前の通り指定します。
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にデプロイするまでの工程を記事にしたいと思います!

この記事の内容に、間違っている点、もっとこうした方がいいという点などありましたらコメントいただけると幸いです。

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