20200926のlaravelに関する記事は6件です。

Google App EngineへのLaravel環境デプロイが思っていたより難しかった件

GCPでLaravelを動かすだけだと思っていたのですが、思いのほか時間がかかったのと、一つで完結するような記事がなかったので、自分へのメモと今後Google Cloud Platformをはじめてみたい方向けにこの記事を残します

始める前に知っておくこと

天下のGoogle様のサービスだけあってできることは非常に多いですが、個人で通常利用する分には課金関連以外でのサポートを受けれません。そのため、基本的に技術的な問題に関してはコミュニティで質問することを推奨してます。
なので自分で調べたり、質問する力がないとすこしきついと感じました

また、詳しくはこの記事で説明していますが、AppEngineではデプロイするファイルの差分が10000以上だとエラーとなるため、回避手段もいくつかありますが、10000なんて必要なライブラリなどを入れていたらすぐに超えてしまうので、注意が必要です


ローカル環境を構築


まずはローカルにlarvelの環境を作り、正常に表示されることを確認します
$ composer create-project "laravel/laravel=5.7.*" sample
$ cd sample
$ php artisan serve

127.0.0.1:8000にブラウザでアクセスしてページが表示されていればOK

app.yamlを追加

先にローカル環境に作ったプロジェクトにapp.yamlを追加しておきます(.envとかと同じ階層でOK)
runtimeにはローカル環境で使っているPHPのバージョンを記載し、自分ならPHP Ver7.3なのでphp73
※現時点ではPHP7.4まで対応していますが、詳細はこちらで確認してください 

app.yaml
runtime: php73

env_variables:
  APP_KEY: YOUR_APP_KEY  ## .envのAPP_KEYを記載 ex) base64:Ts6Uz7mj0x~~~
  APP_STORAGE: /tmp
  VIEW_COMPILED_PATH: /tmp
  SESSION_DRIVER: cookie

app.yamlはインスタンスが崩れていたりするとデプロイ時にエラーを出力するので注意!

App Engine用にストレージパスを追記

bootstrap/app.php
/*
|--------------------------------------------------------------------------
| Set Storage Path
|--------------------------------------------------------------------------
|
| This script allows you to override the default storage location used by
| the  application.  You may set the APP_STORAGE environment variable
| in your .env file,  if not set the default location will be used
|
*/
//この行を追記---------------------------------------------------|
$app->useStoragePath(env('APP_STORAGE', base_path() . '/storage'));

return $app;

不要なパッケージを削除しておく

存在するとエラーの原因になるので消しておく

$ composer remove --dev beyondcode/laravel-dump-server
$ composer remove --dev facade/ignition   //ちなみにLaravel 6.0を使っているならこちらを削除



Google App Engineにデプロイ


まずはGoogleCloudのコンソールで適当なプロジェクトを作っておきます
asdad.png

Google Cloud SDKをインストール


ローカル環境にGoogle Cloud SDKをインストール
自分の場合はUbuntuだったのですが、ほかの環境の方はここを確認
$ echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
$ sudo apt-get install apt-transport-https ca-certificates gnupg
$ echo "deb https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
$ sudo apt-get update && sudo apt-get install google-cloud-sdk

Google Cloud SDKをセットアップ

gcloudコマンドが使えるようになったらローカル環境のフォルダに移動し、セットアップを行います
こちらも詳細はこちらに乗っていますが、以下の通りです

$ gcloud init
Pick configuration to use:
 [1] Re-initialize this configuration [default] with new settings 
 [2] Create a new configuration
Please enter your numeric choice:  1  //デフォルトの設定があればそれを使うので「1」入力。最初などは「2」で設定を登録しておきます
Choose the account you would like to use to perform operations for 
this configuration:
 [1] 登録していればここにメールアドレスが表示される
 [2] Log in with a new account
Please enter your numeric choice:  1 //メールアドレスが登録されていればそれを選択し、なければ「2」を押して、この後発行されるURLで追加できます
Pick cloud project to use: 
 [1] 存在すればgoogle cloudのプロダクト名が表示されます
 [2] 存在すればgoogle cloudのプロダクト名が表示されます
 [3] Create a new project
Please enter numeric choice or text value (must exactly match list 
item):  2 //事前に作成しておいたGoogle Cloudのプロダクトの番号を選択

[asia-east1]が東京、[asia-east2]が大阪リージョンなのでお好きなのを選んでください。a,b,cも任意のものを選択してください

Which compute zone would you like to use as project default?
 [1] [asia-east1-a]  
 [2] [asia-east1-b] 
 ...
 [14] Do not use default zone
 Please enter your numeric choice: 1 //使用するリージョンを決めます。ここは使いたいリージョンを選んでください

デプロイ

$ gcloud app deploy
Do you want to continue (Y/n)?  y

正常ならこんな画面に行くはずです
https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_123511_89ad103a-cdf9-5cbd-44ee-e2677c128631.png

Cloud SQLとの接続(クラウドデータベースとの接続)

SQLインスタンスを作成する

コンソールからSQLインスタンスを作成しますが、最初はアクティブになってないので「SQL」で検索すると出てきます
dwdw.png

自分はMysqlを選択しています
sas.png
インスタンスIDは任意で大丈夫ですが、Mysqlのバージョンやリージョンはローカル環境に合わせましょう
dedewdded.png
インスタンスを作成したらダッシュボードに表示されている接続名"YOUR_CONNECTION_NAME"になるのでメモしておきましょう
また左の"ユーザー"からユーザーも作成できるので、.envで使っているユーザーと同じユーザーをつくっておきます(root以外を使っている場合)
swswsws.png

データベースを作成する


SQLインスタンスのダッシュボード左のメニューから"データベース"を選択してローカル環境で使っているデータベースと同じ名前のデータベースを作っておきます
※コマンドでもデータベースを作成できます(gcloud sql databases create データベース名 --instance=インスタンス名)
dedwedwedwed.png

ローカル環境でテーブルを作成


ローカル環境で以下のコマンドを実行し、テーブルを作成しておきます
$ php artisan make:auth
$ php artisan session:table
$ php artisan migrate --force

ローカル環境のテーブルをクラウドと同期

以下のコマンドをローカル環境で実行するとrootのパスワードが求められ、成功すると同じディレクトリにdatabase_tableというファイルが作成されます

$ mysqldump -u root -p -h localhost ローカル環境のデータベース名 > database_table

プロダクトのダッシュボードで「storage」を検索して、stogareのページを開き、任意の名称のパケットを作成します
ddwdw.png
作成したパケットを選択して、ローカルで作成したdatabase_tableをアップロードします
fsfsfsfsfsfs.png
ファイルがアップデートできたらSQLインスタンスのダッシュボードに移行し、インポートを選択します
sasswq.png
先ほどアップデートしたファイルを参照し、SQLの形式で自分の使うデータベースにインポートします
fwfw4fe4.png

デプロイ

ローカル環境のapp.yamlを差し替えてデプロイを行います

app.yaml
runtime: php73


# この記載がないとcssとjsがnot foundになるので必須
handlers:
# Serve a directory as a static resource.
- url: /css
  static_dir: public/css
- url: /js
  static_dir: public/js


env_variables:
  ## Put production environment variables here.
  APP_KEY: YOUR_APP_KEY  ## .envのAPP_KEYを記載 ex) base64:Ts6Uz7mj0x~~~
  APP_STORAGE: /tmp
  VIEW_COMPILED_PATH: /tmp
  CACHE_DRIVER: database
  SESSION_DRIVER: database
    ## Set these environment variables according to your CloudSQL configuration.
  DB_DATABASE: YOUR_DB_DATABASE        #クラウドのデータベース名
  DB_USERNAME: YOUR_DB_USERNAME        #クラウドのユーザー名
  DB_PASSWORD: YOUR_DB_PASSWORD        #クラウドのユーザーのパスワード
  ## for MYSQL, use DB_SOCKET:
  DB_SOCKET: "/cloudsql/YOUR_CONNECTION_NAME" #YOUR_CONNECTION_NAMEにはメモっていたものを記載
  ## for PostgreSQL, use DB_HOST:
  # DB_HOST: "/cloudsql/YOUR_CONNECTION_NAME" #Postgresqlの場合はこのように記載

$ gcloud app deploy
Do you want to continue (Y/n)?  y

正常にデプロイできると以下のような画面になるので、ユーザーの登録とログインができることを確認してください
dwdwdwdwdw.png

エラー集

SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from sessions where id = dgbEmZ9AufF9UD9kkeUxLlfeppZ1Z3erfe7UHQbHd limit 1)

Cloud SQLに上手く接続できていないときに発生し、原因は様々ですが自分の場合は以下の手段で解決しました

まずはMysqlでshow variables like '%sock%';を実行すると以下のような表示が出てくると思います

+-----------------------------------------+-----------------------------------------+
| Variable_name                           | Value                                   |
+-----------------------------------------+-----------------------------------------+
| performance_schema_max_socket_classes   | 0                                       |
| performance_schema_max_socket_instances | 0                                       |
| socket                                  | /tmp/mysql/mysql.sock              |
+-----------------------------------------+-----------------------------------------+

socketの値を第2引数に入れます

config\database.php
'mysql' => [
    'unix_socket' => env('DB_SOCKET','/tmp/mysql/mysql.sock'),
           ],
app.yaml
DB_SOCKET: "/cloudsql/YOUR_CONNECTION_NAME"

参考文献

https://cloud.google.com/community/tutorials/run-laravel-on-appengine-standard
https://qiita.com/kiyc/items/d86da4e5753220c121b9
https://memento-mori.jp/blog/back-end/google-app-engine_on_laravel
https://note.com/kawa1228/n/n4ab34e8f63fb
http://takaya030.hatenablog.com/entry/2017/07/17/181217
https://cloud.google.com/sdk/gcloud/reference/topic/gcloudignore
https://cloud.google.com/sql/docs/mysql/connect-admin-proxy?hl=ja
https://cloud.google.com/sql/docs/mysql/import-export/importing?hl=ja#console
https://github.com/GoogleCloudPlatform/cloudsql-proxy/issues/140
http://numa0323.hatenablog.jp/entry/2019/09/18/122436
https://laboradian.com/use-php72-with-ubuntu1604/

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

Laravelのバリデーションの日本語化(個人的備忘録)

app.phpの修正

config/app.php
------
# 'en'を'ja'に変更
    'locale' => 'ja',

-------

validation.phpの作成

「resources」ディレクトリの中の「lang」ディレクトリに「ja」ディレクトリを作成し、
validation.phpを作成する。その中に以下の記述を行う。

resources/lang/ja/validation.php
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | バリデーション言語行
    |--------------------------------------------------------------------------
    |
    | 以下の言語行はバリデタークラスにより使用されるデフォルトのエラー
    | メッセージです。サイズルールのようにいくつかのバリデーションを
    | 持っているものもあります。メッセージはご自由に調整してください。
    |
    */

    'accepted'             => ':attributeを承認してください。',
    'active_url'           => ':attributeが有効なURLではありません。',
    'after'                => ':attributeには、:dateより後の日付を指定してください。',
    'after_or_equal'       => ':attributeには、:date以降の日付を指定してください。',
    'alpha'                => ':attributeはアルファベットのみがご利用できます。',
    'alpha_dash'           => ':attributeはアルファベットとダッシュ(-)及び下線(_)がご利用できます。',
    'alpha_num'            => ':attributeはアルファベット数字がご利用できます。',
    'array'                => ':attributeは配列でなくてはなりません。',
    'before'               => ':attributeには、:dateより前の日付をご利用ください。',
    'before_or_equal'      => ':attributeには、:date以前の日付をご利用ください。',
    'between'              => [
        'numeric' => ':attributeは、:minから:maxの間で指定してください。',
        'file'    => ':attributeは、:min kBから、:max kBの間で指定してください。',
        'string'  => ':attributeは、:min文字から、:max文字の間で指定してください。',
        'array'   => ':attributeは、:min個から:max個の間で指定してください。',
    ],
    'boolean'              => ':attributeは、trueかfalseを指定してください。',
    'confirmed'            => ':attributeと、確認フィールドとが、一致していません。',
    'date'                 => ':attributeには有効な日付を指定してください。',
    'date_equals'          => ':attributeには、:dateと同じ日付けを指定してください。',
    'date_format'          => ':attributeは:format形式で指定してください。',
    'different'            => ':attributeと:otherには、異なった内容を指定してください。',
    'digits'               => ':attributeは:digits桁で指定してください。',
    'digits_between'       => ':attributeは:min桁から:max桁の間で指定してください。',
    'dimensions'           => ':attributeの図形サイズが正しくありません。',
    'distinct'             => ':attributeには異なった値を指定してください。',
    'email'                => ':attributeには、有効なメールアドレスを指定してください。',
    'ends_with'            => ':attributeには、:valuesのどれかで終わる値を指定してください。',
    'exists'               => '選択された:attributeは正しくありません。',
    'file'                 => ':attributeにはファイルを指定してください。',
    'filled'               => ':attributeに値を指定してください。',
    'gt'                   => [
        'numeric' => ':attributeには、:valueより大きな値を指定してください。',
        'file'    => ':attributeには、:value kBより大きなファイルを指定してください。',
        'string'  => ':attributeは、:value文字より長く指定してください。',
        'array'   => ':attributeには、:value個より多くのアイテムを指定してください。',
    ],
    'gte'                  => [
        'numeric' => ':attributeには、:value以上の値を指定してください。',
        'file'    => ':attributeには、:value kB以上のファイルを指定してください。',
        'string'  => ':attributeは、:value文字以上で指定してください。',
        'array'   => ':attributeには、:value個以上のアイテムを指定してください。',
    ],
    'image'                => ':attributeには画像ファイルを指定してください。',
    'in'                   => '選択された:attributeは正しくありません。',
    'in_array'             => ':attributeには:otherの値を指定してください。',
    'integer'              => ':attributeは整数で指定してください。',
    'ip'                   => ':attributeには、有効なIPアドレスを指定してください。',
    'ipv4'                 => ':attributeには、有効なIPv4アドレスを指定してください。',
    'ipv6'                 => ':attributeには、有効なIPv6アドレスを指定してください。',
    'json'                 => ':attributeには、有効なJSON文字列を指定してください。',
    'lt'                   => [
        'numeric' => ':attributeには、:valueより小さな値を指定してください。',
        'file'    => ':attributeには、:value kBより小さなファイルを指定してください。',
        'string'  => ':attributeは、:value文字より短く指定してください。',
        'array'   => ':attributeには、:value個より少ないアイテムを指定してください。',
    ],
    'lte'                  => [
        'numeric' => ':attributeには、:value以下の値を指定してください。',
        'file'    => ':attributeには、:value kB以下のファイルを指定してください。',
        'string'  => ':attributeは、:value文字以下で指定してください。',
        'array'   => ':attributeには、:value個以下のアイテムを指定してください。',
    ],
    'max'                  => [
        'numeric' => ':attributeには、:max以下の数字を指定してください。',
        'file'    => ':attributeには、:max kB以下のファイルを指定してください。',
        'string'  => ':attributeは、:max文字以下で指定してください。',
        'array'   => ':attributeは:max個以下指定してください。',
    ],
    'mimes'                => ':attributeには:valuesタイプのファイルを指定してください。',
    'mimetypes'            => ':attributeには:valuesタイプのファイルを指定してください。',
    'min'                  => [
        'numeric' => ':attributeには、:min以上の数字を指定してください。',
        'file'    => ':attributeには、:min kB以上のファイルを指定してください。',
        'string'  => ':attributeは、:min文字以上で指定してください。',
        'array'   => ':attributeは:min個以上指定してください。',
    ],
    'not_in'               => '選択された:attributeは正しくありません。',
    'not_regex'            => ':attributeの形式が正しくありません。',
    'numeric'              => ':attributeには、数字を指定してください。',
    'present'              => ':attributeが存在していません。',
    'regex'                => ':attributeに正しい形式を指定してください。',
    'required'             => ':attributeは必ず指定してください。',
    'required_if'          => ':otherが:valueの場合、:attributeも指定してください。',
    'required_unless'      => ':otherが:valuesでない場合、:attributeを指定してください。',
    'required_with'        => ':valuesを指定する場合は、:attributeも指定してください。',
    'required_with_all'    => ':valuesを指定する場合は、:attributeも指定してください。',
    'required_without'     => ':valuesを指定しない場合は、:attributeを指定してください。',
    'required_without_all' => ':valuesのどれも指定しない場合は、:attributeを指定してください。',
    'same'                 => ':attributeと:otherには同じ値を指定してください。',
    'size'                 => [
        'numeric' => ':attributeは:sizeを指定してください。',
        'file'    => ':attributeのファイルは、:sizeキロバイトでなくてはなりません。',
        'string'  => ':attributeは:size文字で指定してください。',
        'array'   => ':attributeは:size個指定してください。',
    ],
    'starts_with'          => ':attributeには、:valuesのどれかで始まる値を指定してください。',
    'string'               => ':attributeは文字列を指定してください。',
    'timezone'             => ':attributeには、有効なゾーンを指定してください。',
    'unique'               => ':attributeの値は既に存在しています。',
    'uploaded'             => ':attributeのアップロードに失敗しました。',
    'url'                  => ':attributeに正しい形式を指定してください。',
    'uuid'                 => ':attributeに有効なUUIDを指定してください。',

    /*
    |--------------------------------------------------------------------------
    | Custom バリデーション言語行
    |--------------------------------------------------------------------------
    |
    | "属性.ルール"の規約でキーを指定することでカスタムバリデーション
    | メッセージを定義できます。指定した属性ルールに対する特定の
    | カスタム言語行を手早く指定できます。
    |
    */

    'custom' => [
        '属性名' => [
            'ルール名' => 'カスタムメッセージ',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | カスタムバリデーション属性名
    |--------------------------------------------------------------------------
    |
    | 以下の言語行は、例えば"email"の代わりに「メールアドレス」のように、
    | 読み手にフレンドリーな表現でプレースホルダーを置き換えるために指定する
    | 言語行です。これはメッセージをよりきれいに表示するために役に立ちます。
    |
    */

    'attributes' => [],
];

しかし、このままだと「emailには、有効なメールアドレスを指定してください。」と表示がされるので、細部の日本語化を自ら設定する必要がある。

resources/lang/ja/validation.php
------
    'attributes' => [
       'email' => 'メールアドレス',
],
-------

これで「メールアドレスには、有効なメールアドレスを指定してください。」と表示がされる。

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

LaravelのFactoryで連続した日付データの挿入


Laravelのseederやらfactoryについて勉強中、連続した日付データの挿入に苦戦したので備忘録




schedule_table

id title schedule_day
1 aaa 2020-09-27
2 bbb 2020-09-28
3 ccc 2020-09-29
4 ddd 2020-09-30
5 eee 2020-10-01

↑こんな感じで日付が連続したテストデータが欲しかった




実行するシーダーファイルを記述

DatabaseSeeder.php
class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call([
            UserSeeder::class,
            ScheduleSeeder::class
        ]);
    }
}



対象のカラムはシーダーファイルから値を指定するので空文字にしておく

ScheduleFactory.php
$factory->define(App\Models\Schedule::class, function (Faker $faker) {
    return [
        'title' => $faker->words,
         // seederファイルから上書きするので空にしておく
        'schedule_day' => '',
    ];
});



modify('+1day')でタイムスタンプを変更しつつ、その日付をfor文で一件ずつ挿入していく

ScheduleSeeder.php
class ScheduleSeeder extends Seeder
{
    public function run()
    {
        $scheduled_date = new DateTime();
        for ($i = 0; $i < 5; $i++)
        {
            factory(App\Models\Schedule::class, 1)
            // createに配列でカラム名、値をセットするとfactoryファイルの内容を上書きできる
            ->create([
                'schedule_day' => $scheduled_date->modify('+1day')->format('Y-m-d')
            ]);
        }
    }
}



この辺、あまり参考記事がないので難しい、、

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

【Laravel】Eloquent:複数代入時の$guardedの使い方についての備忘録

開発環境

PHP7.3
Laravel5.8
MySQL8.0

フォームから送信した値を保存する時などに、「値を用意しない項目」を$guardedで指定する

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Message extends Model
{
    protected $guarded = ['id'];
}

// データ保存時に['id']は除かれる
// フォーム側で['id']を送信しなくともnullエラーが起きない

逆に、「この値のみを保存したい」という時は$fillableで指定する

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Message extends Model
{
    protected $fillable = ['chat_room_id', 'context', 'post_user_info_id'];
}

// 送信した値の中から、'chat_room_id', 'context', 'post_user_info_id'のみを保存し、それ以外の値は除かれる

まとめ

指定時の挙動から、
$fillableは「ホワイトリスト」
$guardedは「ブラックリスト」
と言われているらしい。

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

Laravelとは+導入方法

今回はphpのフレームワークの中で最もポピュラーであるLaravelという物を紹介していきたいと思います。

フレームワークとは

そもそもフレームワークとはなんだろうと思われる方もいらっしゃると思いますので、まずフレームワークの説明をしていきたいと思います。

フレームワークとは概念的な意味で言うと「枠組み」と言う意味合いをもっています。あるいは、システム開発を楽に行えるようになるプログラムや雛形のことを意味します。このフレームワークを使う事により、開発時間の短縮化、複数人で開発を行う際にコードの統一化を図ることができ、効率的に開発を進めていく事ができます。
下記はphpのフレームワークと簡単な特徴を紹介します。

1.Laravel

世界で人気のフレームワーク
2020年現在、国内において主流のPHPフレームワークであり日本語のドキュメントも充実しています。

2.Cakephp 

日本では最も利用されてきたPHPフレームワーク
Ruby on Railsの概念を取り入れて開発されたPHPのフレームワークで、セキュリティ対策が充実しているので商用アプリケーションに最適です。

3.CodeIgniter

2006年にリリースされたPHPのフレームワークで、動的なWebサイトの開発に最適です。
必要に応じて随時機能追加していくような設計となっているので、軽量で高速動作するのが特徴です。

4.Symfony

2007年にリリースされたRuby on Railsの概念とMojaviの思想を取り入れたPHPのフレームワークで、大規模なWebサービスを開発するのに最適です。

5.FuelPHP

FuelPHPは2011年にリリースされた比較的新しいPHPのフレームワークで、「規約より設定」を重視して設計されているので高度なWebアプリケーションの開発に適しています。

他にもフレームワークの種類はいくつかありますので興味のある方は是非調べてみてください。
この中で今回は最もポピュラーなLaravelを紹介していきます。

Laravel

LaravelはMVCモデルに基づいてます。
MVCモデルとはM(Model),V(View),C(Contoroller),の頭文字をとったものです。
下記の流れで処理が実行されていきます。以下のような流れで処理が実行されていきます。①のリクエストの後にRoutingという物も存在します。それを介してContollerに処理を繋げていきます。
image.png

導入方法

まずMAMPのhtdocsに移動していきます。

$ cd /Applications/MAMP/htdocs/

ここではcomposerを使うと簡単にインストールできますので、composerを使ってインストールしていきます。composerの導入は省略します。

$ composer global require laravel/installer

こちらのコマンドでインストールできます。そして、次のコマンドでLavavelでblogという新しいプロジェクトを作成できます。

$ laravel new blog

また、ターミナルでComposerのcreate-projectコマンドを実行し、Laravelをインストールする方法もあります。

$ composer create-project --prefer-dist laravel/laravel blog

終わりに

今回はLaravelを導入するまでの流れを紹介しました。次回は実際にLaravelを使って、一連の流れを紹介していきたいと思います。

参考サイト

https://kredo.jp/media/php-framework/
https://futurizm.jp/articles/191
https://readouble.com/laravel/7.x/ja/installation.html
https://www.ritolab.com/entry/49

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

【Laravel】バーコードを表示する

流れ

1、パッケージ選定
2、インストール
3、実装

パッケージ選定

Packagistで「barcode Laravel」で検索します。
スクリーンショット 2020-09-25 10.38.33.png
最上位に表示されている、ダウンロード数とスター数が一番多いmilon/barcodeを利用します。

ダウンロード数やスター数が多いパッケージを利用する理由は、
詰まった時に解決する術をどこかで見つけられる可能性が高いからです。

インストール

下記コマンドで実行。

composer require milon/barcode

こけました。。

Your requirements could not be resolved to an installable set of packages.
  Problem 1
     - milon/barcode 7.0.0 requires illuminate/support ^7.0
(抜粋)

illuminate/support ^7.0が必要と言われてますね。
バージョン指定しない場合は、最新のものをインストールしようとするので、
古めのLaravel5.8を使っていたのでダメだったみたいですね。

なのでバージョン指定をして再度インストールします。
Laravel5.8でしたがLaravel5.0 and 5.1Laravel6.*
間に記述がなかったので、ちょっと迷いました。

スクリーンショット 2020-09-25 11.07.07.png

試しにLaravel6.*扱いの下記コマンドで実行したところ、
無事インストールできました。

composer require milon/barcode:"6.0"

実装

バーコード表示のための準備で、
app.phpでプロバイダとエイリアスの登録を行います。

app.php
    'providers' => [

        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
        Illuminate\Bus\BusServiceProvider::class,
        (省略)

        /*
         * Package Service Providers...
         */
      + Milon\Barcode\BarcodeServiceProvider::class,

        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
        App\Providers\CommonServiceProvider::class,

    ],

    /*
    |--------------------------------------------------------------------------
    | Class Aliases
    |--------------------------------------------------------------------------
    |
    | This array of class aliases will be registered when this application
    | is started. However, feel free to register as many as you wish as
    | the aliases are "lazy" loaded so they don't hinder performance.
    |
    */

    'aliases' => [

        'App' => Illuminate\Support\Facades\App::class,
        'Arr' => Illuminate\Support\Arr::class,
        'Artisan' => Illuminate\Support\Facades\Artisan::class,
        (省略)
        'Validator' => Illuminate\Support\Facades\Validator::class,
        'View' => Illuminate\Support\Facades\View::class,

      + 'DNS1D' => Milon\Barcode\Facades\DNS1DFacade::class,
      + 'DNS2D' => Milon\Barcode\Facades\DNS2DFacade::class,

    ],

Webページにバーコードを表示するので、HTMLで生成。

$barcode = DNS1D::getBarcodeHTML(1234567A, "C128", 3, 70, 'black', true);

この変数をbladeファイルに渡して、表示したい場所にてechoで出力。
(1234567Aは架空の数字です。)

home.blade.php
<?php echo $barcode ?>

スクリーンショット 2020-09-26 10.20.19.png

メソッドのgetBarcodeHTMLは、

第一引数に、コード
第二引数に、バーコードのタイプ
第三引数に、高さ
第四引数に、幅
第五引数に、色
第六引数に、下記にコードを表示するかどうかの真偽値

をとる形ですね。

まとめ

少しつまるところもあったので、復習で記事にまとめました。おわり。

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