20190625のlaravelに関する記事は8件です。

laravelをAWS EC2にデプロイする

はじめに

vagrantなどのローカル開発環境で作成したlaravelプロジェクトをAWSのEC2上にデプロイする時に色々迷ったので、まとめとしてあげます。本番サーバにAWSを使ってみたいという方に見て頂ければと思います。

環境

php7.2.18
apache2.4.39
laravel5.7
EC2(Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type 無料枠)
RDS(mysqlを使用)

前提

・ローカルで開発したプロジェクトをすでにgithubにプッシュ済み
・EC2にSSH接続できている
・EC2からRDSへ接続できる設定ができている(セキュリティグループなど)

PHP7.2インストール

インストールできるリスト確認
sudo yum list available | grep php72

インストール
sudo yum install -y \
  php72 php72-devel php72-fpm php72-gd php72-mbstring \
  php72-mysqlnd php72-pdo \
  php72-xml php72-json

インストール済みを確認
sudo yum list installed | grep php72

バージョン確認
php -v

Mysqlインストール RDSとの接続

インストール
sudo yum -y install mysql

接続
mysql test_db -h <エンドポイント> -P 3306 -u test_user -p

apacheインストール

sudo yum install -y httpd24

上記の流れでインストールを進めていると、なぜかすでにインストール済みと出た。
どこで入れたかわからなかった。
続きの設定を行っていく

wabサーバの起動
sudo service httpd start

システムがブートするたびにapacheが起動するよう設定
sudo chkconfig httpd on

有効か確認
chkconfig --list httpd

ドキュメントルートの権限変更

ユーザをapacheグループに追加
sudo usermod -a -G apache ec2-user

一旦ログアウト
exit

グループのメンバーシップを検証
groups

グループ所有権をapacheグループに変更
sudo chown -R ec2-user:apache /var/www

グループの書き込み許可追加
sudo chmod 2775 /var/www

サブディレクトにグループ ID を設定するには、/var/www とサブディレクトのディレクトリ許可
find /var/www -type d -exec sudo chmod 2775 {} \;

グループ書き込み許可を追加するには、/var/www とサブディレクトリのファイル許可を再帰的に変更します。
find /var/www -type f -exec sudo chmod 0664 {} \;

Gitインストール

sudo yum install git

composer自身のインストール

インストール
sudo curl -sS https://getcomposer.org/installer | php

パスを通す
sudo mv composer.phar /usr/local/bin/composer

LaravelプロジェクトのClone

cd /var/www/html
git clone <URL>

apacheのドキュメントルート設定

設定ファイルを開く
sudo vi /etc/httpd/conf/httpd.conf

以下に変更
DocumentRoot "/var/www/html/自分のlaravel_project/public

最終行に以下を追記
# .htaccess 有効化
<Directory /var/www/html/自分のlaravel_project/public>
    AllowOverride All
</Directory>

Laravelプロジェクトでcomposer インストール

cd /var/www/html/laravelプロジェクト
composer install

config, routeのキャッシュクリア

php artisan config:cache
php artisan route:cache

プロジェクトのパーミッション変更

chmod 777 storage -R
chmod 777 bootstrap/cache -R

.envの設定

git cloneしたLaravelプロジェクトには.envファイルがないので、
composer insatallで作成された、.env.exsampleを使用する

cp .env.example .env
vi .env

APP_URL=http://IPアドレス ←サーバーのIPにする

DB_CONNECTION=mysql
DB_HOST=←RDSのエンドポイント
DB_DATABASE=データベース名
DB_USERNAME=RDS作成時のユーザ名
DB_PASSWORD=設定したパスワード

キーを作成し、キャッシュをクリアする

php artisan key:generate
php artisan config:clear

テーブル作成

php artisan migrate

シンボリックリンクの作成

これは作成したアプリで画像アップロードしているような場合は必要かと思います。

php artisan storage::link

ブラウザで確認する

あとはブラウザでEC2のIPアドレスを入力するだけです!
ここまでくればブラウザで正しく表示されるかと思います!

参考

https://qiita.com/reflet/items/11ad79e01e808876caa1
https://nori-life.com/install-laravel-aws/
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html
https://qiita.com/takg/items/9a044b36cdf216a42ba6
https://qiita.com/nbapps_dev/items/9307e6fc0edb59c09181

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

PHP_CodeSniffierのインストール、使い方

環境

CentOS 7.5
composer 1.7.2
PHP 7.2
Laravel 5.7.11

インストール

$ composer require --dev "squizlabs/php_codesniffer=*"

devオプションで開発環境でのみインストールするようにする。packagistの記載ではglobalオプションをつけているが、プロジェクトのみで使用するためつけていない。

インストールが完了すると、codesnifferを使用できるようになるので、ヘルプを表示してみる。

$ cd プロジェクトフォルダパス
$ ./vendor/bin/phpcs -h
Usage: phpcs [-nwlsaepqvi] [-d key[=value]] [--colors] [--no-colors]
  [--cache[=<cacheFile>]] [--no-cache] [--tab-width=<tabWidth>]
  [--report=<report>] [--report-file=<reportFile>] [--report-<report>=<reportFile>]

以下省略

使い方

デフォルトで使用可能なコーディング規約を確認

$ ./vendor/bin/phpcs -i
The installed coding standards are MySource, PEAR, PSR1, PSR12, PSR2, Squiz and Zend

プロジェクトのルートディレクトリ直下にphpcs.xmlを作成(これがルールファイルになる)。以下はPSR-1とPSR-2の規約をチェックするルールファイル。プロジェクト直下のnode_modules, storage, vendorディレクトリはチェック対象外とする。

<?xml version="1.0"?>
<ruleset name="Custom Standard">
    <rule ref="PSR2">
        <!-- "PSR2" の中で除外するルールがあれば記載 -->
        <!--<exclude name="Generic.Files.LineLength"/>-->
        <!--<exclude name="PSR1.Classes.ClassDeclaration"/>-->
    </rule>
    <!-- 追加するルールがあれば記載 -->
    <!--<rule ref="PEAR.WhiteSpace.ObjectOperatorIndent"/>-->
    <!-- 除外するファイル・ディレクトリ -->
    <exclude-pattern>node_modules/</exclude-pattern>
    <exclude-pattern>storage/</exclude-pattern>
    <exclude-pattern>vendor/</exclude-pattern>
</ruleset>

設定したチェックルールの一覧を確認する。

$ ./vendor/bin/phpcs -e
The PSR2 Rule Set standard contains 42 sniffs

Generic (12 sniffs)
-------------------
  Generic.ControlStructures.InlineControlStructure
  Generic.Files.ByteOrderMark
  Generic.Files.LineEndings

以下省略

各ルールとチェックしている規約の内容はこちらを参考にさせていただきました。
PHP CodeSnifferにおけるPSR1,2の検知箇所と対応するSniffer

phpcs.xmlではルールとしてPSR2のみを指定したが、チェックするルール自体は以下ファイルに記載されており、この中にPSR-1が記載されているので、PSR-1とPSR-2の両方がチェックされる事が分かる。
src/Standards/PSR2/ruleset.xml

ファイル別に結果を出力

$ ./vendor/bin/phpcs --report=summary .
PHP CODE SNIFFER REPORT SUMMARY
---------------------------------------------------------------------------------------
FILE                                                             ERRORS  WARNINGS
---------------------------------------------------------------------------------------
/var/www/html/app/Http/Controllers/Admin/Test1Controller.php     0       2
/var/www/html/app/Http/Controllers/Admin/Test2Controller.php     6       2
/var/www/html/app/Http/Controllers/Admin/Test3Controller.php     0       2
/var/www/html/app/Http/Controllers/Admin/Test4Controller.php     7       7
/var/www/html/app/Http/Controllers/Admin/Test5Controller.php     0       6
---------------------------------------------------------------------------------------
A TOTAL OF 13 ERRORS AND 19 WARNINGS WERE FOUND IN 5 FILES
---------------------------------------------------------------------------------------
PHPCBF CAN FIX 13 OF THESE SNIFF VIOLATIONS AUTOMATICALLY
---------------------------------------------------------------------------------------

ルール別に結果を出力

$ ./vendor/bin/phpcs --report=source /path/to/code
PHP CODE SNIFFER VIOLATION SOURCE SUMMARY
-------------------------------------------------------------------------------------------
    STANDARD  CATEGORY            SNIFF                                               COUNT
-------------------------------------------------------------------------------------------
[ ] Generic   Files               Line length too long                                19
[x] PSR2      Methods             Function call signature multiple arguments          4
[x] PSR2      Methods             Function call signature content after open bracket  3
[x] PSR2      Methods             Function call signature close bracket line          2
[x] PSR2      Methods             Function call signature indent                      2
[x] Squiz     Control structures  Control signature space after close parenthesis     1
[x] Squiz     Control structures  Control signature space after keyword               1
-------------------------------------------------------------------------------------------
A TOTAL OF 32 SNIFF VIOLATIONS WERE FOUND IN 7 SOURCES
-------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 6 MARKED SOURCES AUTOMATICALLY (13 VIOLATIONS IN TOTAL)
-------------------------------------------------------------------------------------------

結果レポートをファイルとして出力。
プロジェクトフォルダ直下のresult以下にtest_phpcs.xmlファイルが作成される。

$ ./vendor/bin/phpcs --report=checkstyle --report-file=result/test_phpcs.xml .
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP_CodeSniffierのインストールと使い方

環境

CentOS 7.5
composer 1.7.2
PHP 7.2
Laravel 5.7.11

インストール

$ composer require --dev "squizlabs/php_codesniffer=*"

devオプションで開発環境でのみインストールするようにしている。packagistの記載ではglobalオプションをつけているが、composerのホームディレクトリにインストールしない場合は不要。

インストールが完了すると、codesnifferを使用できるようになるので、ヘルプを表示してみる。

$ cd プロジェクトフォルダパス
$ ./vendor/bin/phpcs -h
Usage: phpcs [-nwlsaepqvi] [-d key[=value]] [--colors] [--no-colors]
  [--cache[=<cacheFile>]] [--no-cache] [--tab-width=<tabWidth>]
  [--report=<report>] [--report-file=<reportFile>] [--report-<report>=<reportFile>]

以下省略

使い方

デフォルトで使用可能なコーディング規約を確認

$ ./vendor/bin/phpcs -i
The installed coding standards are MySource, PEAR, PSR1, PSR12, PSR2, Squiz and Zend

プロジェクトのルートディレクトリ直下にphpcs.xmlを作成(これがルールファイルになる)。以下はPSR-1とPSR-2の規約をチェックするルールファイル。プロジェクト直下のnode_modules, storage, vendorディレクトリはチェック対象外とする。

<?xml version="1.0"?>
<ruleset name="Custom Standard">
    <rule ref="PSR2">
        <!-- "PSR2" の中で除外するルールがあれば記載 -->
        <!--<exclude name="Generic.Files.LineLength"/>-->
        <!--<exclude name="PSR1.Classes.ClassDeclaration"/>-->
    </rule>
    <!-- 追加するルールがあれば記載 -->
    <!--<rule ref="PEAR.WhiteSpace.ObjectOperatorIndent"/>-->
    <!-- 除外するファイル・ディレクトリ -->
    <exclude-pattern>node_modules/</exclude-pattern>
    <exclude-pattern>storage/</exclude-pattern>
    <exclude-pattern>vendor/</exclude-pattern>
</ruleset>

設定したチェックルールの一覧を確認する。

$ ./vendor/bin/phpcs -e
The PSR2 Rule Set standard contains 42 sniffs

Generic (12 sniffs)
-------------------
  Generic.ControlStructures.InlineControlStructure
  Generic.Files.ByteOrderMark
  Generic.Files.LineEndings

以下省略

各ルールとチェックしている規約の内容はこちらを参考にさせていただきました。
PHP CodeSnifferにおけるPSR1,2の検知箇所と対応するSniffer

phpcs.xmlではルールとしてPSR2のみを指定したが、チェックするルール自体は以下ファイルに記載されており、この中にPSR-1が記載されているので、PSR-1とPSR-2の両方がチェックされる事が分かる。
src/Standards/PSR2/ruleset.xml

ファイル別に結果を出力

$ ./vendor/bin/phpcs --report=summary .
PHP CODE SNIFFER REPORT SUMMARY
---------------------------------------------------------------------------------------
FILE                                                             ERRORS  WARNINGS
---------------------------------------------------------------------------------------
/var/www/html/app/Http/Controllers/Admin/Test1Controller.php     0       2
/var/www/html/app/Http/Controllers/Admin/Test2Controller.php     6       2
/var/www/html/app/Http/Controllers/Admin/Test3Controller.php     0       2
/var/www/html/app/Http/Controllers/Admin/Test4Controller.php     7       7
/var/www/html/app/Http/Controllers/Admin/Test5Controller.php     0       6
---------------------------------------------------------------------------------------
A TOTAL OF 13 ERRORS AND 19 WARNINGS WERE FOUND IN 5 FILES
---------------------------------------------------------------------------------------
PHPCBF CAN FIX 13 OF THESE SNIFF VIOLATIONS AUTOMATICALLY
---------------------------------------------------------------------------------------

ルール別に結果を出力

$ ./vendor/bin/phpcs --report=source /path/to/code
PHP CODE SNIFFER VIOLATION SOURCE SUMMARY
-------------------------------------------------------------------------------------------
    STANDARD  CATEGORY            SNIFF                                               COUNT
-------------------------------------------------------------------------------------------
[ ] Generic   Files               Line length too long                                19
[x] PSR2      Methods             Function call signature multiple arguments          4
[x] PSR2      Methods             Function call signature content after open bracket  3
[x] PSR2      Methods             Function call signature close bracket line          2
[x] PSR2      Methods             Function call signature indent                      2
[x] Squiz     Control structures  Control signature space after close parenthesis     1
[x] Squiz     Control structures  Control signature space after keyword               1
-------------------------------------------------------------------------------------------
A TOTAL OF 32 SNIFF VIOLATIONS WERE FOUND IN 7 SOURCES
-------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 6 MARKED SOURCES AUTOMATICALLY (13 VIOLATIONS IN TOTAL)
-------------------------------------------------------------------------------------------

結果レポートをファイルとして出力。
プロジェクトフォルダ直下のresult以下にtest_phpcs.xmlファイルが作成される。

$ ./vendor/bin/phpcs --report=checkstyle --report-file=result/test_phpcs.xml .

■参考にさせていただきました
新標準PSRに学ぶきれいなPHP
https://www.slideshare.net/yandod/psrphp

PSR-1 基本コーディング規約(日本語)
http://www.infiniteloop.co.jp/docs/psr/psr-1-basic-coding-standard.html

PSR-2 コーディングガイド(日本語)
http://www.infiniteloop.co.jp/docs/psr/psr-2-coding-style-guide.html

PHP PSR一覧 2017年版
https://qiita.com/rana_kualu/items/f41d8f657df7709bda0f

PHP CodeSnifferにおけるPSR1,2の検知箇所と対応するSniffer
https://qiita.com/piotzkhider/items/c90dd9253e9822fab3a2

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

Laravelのdb:seedで1452エラーが出る

Laravelを触り始めて約一ヶ月の初心者です
つまづいたのでメモ

結論としてはLaravelクエリビルダのdelete(というかMySQLのDELETE)ではauto_incrementがリセットされないという仕様が分かってなかったっていう話です


1つのUserに対して多数のItemが紐付く構造
userを削除した際はitemも削除するよう外部キーを持たせてあります

2019_06_25_000000_create_item_table.php
public function up()
    {
        Schema::create('items', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->text('title');
            $table->bigInteger('user_id')->unsigned();
            $table->timestamps();

            $table->foreign('user_id')
                ->references('id')
                ->on('users')
                ->onDelete('cascade');
        });
    }

ユーザテーブルはLaravelデフォルトなので省略

↓こちらがseeder

UserTableSeeder.php
public function run()
    {
        DB::table('users')->delete();

        App\User::create([
            'name' => 'hoge',
            'email' => 'hoge@example.com',
            'password' => Hash::make('hogehoge'),
        ]);
        App\User::create([
            'name' => 'hage',
            'email' => 'hage@example.com',
            'password' => Hash::make('hagehage'),
        ]);
    }
ItemTableSeeder.php
public function run()
    {
        DB::table('items')->delete();

        App\Item::create([
            'title' => '君という花',
            'user_id' => '1',
        ]);
        App\Item::create([
            'title' => 'リライト',
            'user_id' => '2',
        ]);
    }

2つともseed時は一回deleteで全消ししてからデータを挿入します

一回migrate:refreshを挟まないとdb:seed出来ない問題

refreshせずにシーディングを実行すると1452エラーが出る

$ php artisan db:seed
Seeding: UsersTableSeeder
Seeding: ItemsTableSeeder

   Illuminate\Database\QueryException  : SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

refreshを挟むと何故か成功する

php artisan migrate:refreshしたあとにphp artisan db:seedを再度実行

$ php artisan migrate:refresh                                                                                         
Rolling back: 2019_06_10_190034_create_items_table
Rolled back:  2019_06_10_190034_create_items_table
Rolling back: 2014_10_12_100000_create_password_resets_table
Rolled back:  2014_10_12_100000_create_password_resets_table
Rolling back: 2014_10_12_000000_create_users_table
Rolled back:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table
Migrating: 2019_06_10_190034_create_items_table
Migrated:  2019_06_10_190034_create_items_table
$ php artisan db:seed                                                                                                 [~/dev/app/gaogao_gate/likes]
Seeding: UsersTableSeeder
Seeding: ItemsTableSeeder
Database seeding completed successfully.

(逆に)なんでや…

再度db:seedを実行、やっぱり1452のエラーが出る…
UserTableを確認してみた

mysql> select id from users;
+----+
| id |
+----+
|  3 |
|  4 |
+----+
2 rows in set (0.01 sec)

id途中から始まってるやんけ!

どうやらdeleteではauto_incrementに設定したidがリセットされない様子(無知並感)
既に無いuser_idをitemに与えようとして1452エラーが出ていたようです

どうしよう

これ見てdeleteじゃなくてtruncate使えばええやん!と思ったけどそうでも無い様子 (1701エラーを眺めながら)
外部キーがあると使えない…だと…(rollbackもできなくなる)

deleteと同時にauto_incrementを1に戻してしまえばよい

そんな都合のいいクエリは無いみたいなのでdeleteの下にSQLを1行追加

UserTableSeeder.php
DB::table('users')->delete();
DB::unprepared("ALTER TABLE users AUTO_INCREMENT = 1 ");

これでとりあえず解決したみたいです?

ていうかItemSeederでuser_idを数字で与えているのがそもそもダメなのでは…

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

【Laravel】GItLab CIでユニットテストを自動実行+カバレッジを出力してGitLab Pagesにホスティングする

自前で運用しているGitLab CE(Community Edition)で、Pipelineを利用して
LaravelアプリケーションのPHP Unitを自動で回す設定を作成した時のメモ

PHP Unit設定

PHP Unitを実行した際に、カバレッジのデータがHTMLとして出力されるように、以下の設定を行う

phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
... 省略

+    <logging>
+        <log type="coverage-clover" target="public/coverage/logs/clover.xml"/>
+        <log type="coverage-html" target="public/coverage"/>
+    </logging>
</phpunit>

GitLab CI設定

Gitリポジトリのルート配下に.gitlab-ci.ymlを作成する。

.gitlab-ci.yml
# composerによって生成されるvendor配下をキャッシュする
cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - vendor/

# Build and Test
php-7.2: &build
  image: php:7.2-cli-alpine
  variables:
    COMPOSER_VERSION: 1.8.6
  script:
    # 必要なライブラリをインストール
    - apk add git autoconf build-base
    - pecl install xdebug
    - docker-php-ext-install mysqli pdo pdo_mysql
    - docker-php-ext-enable xdebug
    - curl https://getcomposer.org/download/${COMPOSER_VERSION}/composer.phar > composer.phar
    - php composer.phar install
    # .envの作成
    - cp .env.example .env
    # ユニットテストの実行
    - vendor/bin/phpunit --configuration phpunit.xml --coverage-text --colors=never
  artifacts:
    paths:
      # 生成したカバレッジレポートを、次のjobで利用する
      - public/coverage

# 異なるPHPのバージョンを指定してジョブを回したい場合、
# 以下のように`build`アンカーを呼び出したうえで、別のalpineのimageを指定すればOK
php-7.1:
  <<: *build
  image: php:7.1-cli-alpine
  # 以下のようにすれば、composerのバージョンを指定できる
  variables:
    COMPOSER_VERSION: 1.6.5

# Unitテストのカバレッジを、Gitlab Pagesにホスティングする
pages:
  stage: deploy
  extends: php-7.2
  artifacts:
    paths:
      - public
  only:
    - develop

これで、GitLabのリモートリポジトリにgit pushすると自動でテストが走る。
以下のURLにアクセスすると、HTML出力したユニットテストのカバレッジが確認できる。
http://{GitLabドメイン}/{プロジェクト名}/coverage/

参考サイト

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

GItLab CIでユニットテストを自動実行+カバレッジを出力してGitLab Pagesにホスティングする

自前で運用しているGitLab CE(Community Edition)で、Pipelineを利用して
LaravelアプリケーションのPHP Unitを自動で回す設定を作成した時のメモ

PHP Unit設定

PHP Unitを実行した際に、カバレッジのデータがHTMLとして出力されるように、以下の設定を行う

phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
... 省略

+    <logging>
+        <log type="coverage-clover" target="public/coverage/logs/clover.xml"/>
+        <log type="coverage-html" target="public/coverage"/>
+    </logging>
</phpunit>

GitLab CI設定

Gitリポジトリのルート配下に.gitlab-ci.ymlを作成する。

.gitlab-ci.yml
# composerによって生成されるvendor配下をキャッシュする
cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - vendor/

# Build and Test
php-7.2: &build
  image: php:7.2-cli-alpine
  variables:
    COMPOSER_VERSION: 1.8.6
  script:
    # 必要なライブラリをインストール
    - apk add git autoconf build-base
    - pecl install xdebug
    - docker-php-ext-install mysqli pdo pdo_mysql
    - docker-php-ext-enable xdebug
    - curl https://getcomposer.org/download/${COMPOSER_VERSION}/composer.phar > composer.phar
    - php composer.phar install
    # .envの作成
    - cp .env.example .env
    # ユニットテストの実行
    - vendor/bin/phpunit --configuration phpunit.xml --coverage-text --colors=never
  artifacts:
    paths:
      # 生成したカバレッジレポートを、次のjobで利用する
      - public/coverage

# 異なるPHPのバージョンを指定してジョブを回したい場合、
# 以下のように`build`アンカーを呼び出したうえで、別のalpineのimageを指定すればOK
php-7.1:
  <<: *build
  image: php:7.1-cli-alpine
  # 以下のようにすれば、composerのバージョンを指定できる
  variables:
    COMPOSER_VERSION: 1.6.5

# Unitテストのカバレッジを、Gitlab Pagesにホスティングする
pages:
  stage: deploy
  extends: php-7.2
  artifacts:
    paths:
      - public
  only:
    - develop

これで、GitLabのリモートリポジトリにgit pushすると自動でテストが走る。
以下のURLにアクセスすると、HTML出力したユニットテストのカバレッジが確認できる。
http://{GitLabドメイン}/{プロジェクト名}/coverage/

参考サイト

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

laravel redis cache

laravel で redis キャッシュを使いたい。
ほんとだっるい。

ついでに session も redis にしてやる。

CACHE_DRIVER=redis
REDIS_HOST=133.230.222.333
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_DB=7
REDIS_READ_WRITE_TIMEOUT=60
SESSION_DRIVER=redis


database.php

    'redis' => [

        'client' => 'predis',
        'default' => [
            'host' => '133.230.222.333',
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 7),
        ],

        'cache' => [
            'host' => '133.230.222.333',
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_CACHE_DB', 7),
        ],

    ],

cache.php 18行目あたり

    'default' => env('CACHE_DRIVER', 'redis'),

これでredisに入れられます。

        $name = 'hoge_1';//キャッシュの名前
        $time = 3;//分

        //        キャッシュがあれば使う。なければ処理をして返す。

//        {}内で変数を使いたい場合は use を使う
//        $data = Cache::remember($name,$time, function () use ($repeat,$social_id) {
        $data = Cache::remember($name,$time, function () {
            $data = "ほげ".time();
            return $data;
        });

        Cache::forget($name);//キャッシュを削除

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

【Laravel初心者】ルーティングとコントローラーの基礎知識

はじめに

こんにちは。てりーと申します!
プログラミング歴が4ヶ月目に入ろうとしているエンジニアです。

今月からLaravelを触り始めたので、備忘録がてら記事の投稿をします。
ルーティングとコントローラについての基礎知識をさらっとまとめました。

何かご指摘やアドバイス、感想を言って頂けると幸いです。

参考文献

「PHPプレームワーク Laravel入門」
 2章 ルーティングとコントローラ

ルーティング

ルーティングに関する情報は「routes」にまとまっています。

■ 一般的なwebサイト
webサーバーの公開フォルダにファイルを用意しておいて、そこにアクセスしたら表示される。

■ Laravel
アドレスに割り付けられたプログラムが実行される。その際の関連付けを行うのがルーティングです。
例:「○○にアクセスすると,××という処理を施される」

web.php

このファイルが一般的なwebサイトにアクセスする際に使うルーティングです。

web.php
<?php
Route::get('/', function () {
   return view('welcome');
});

'/'の部分は第1引数に割り当てられるアドレスを指します。
function () {......}の部分はそれによって呼び起こされる処理が入ります。

function () {
return view('welcome');
});

では、「resouces/view」フォルダにある「welcome.blader.php」をレンダリングして表示しています。

コントローラー

具体的な処理を実装するために用意されているのがコントローラです。
LaravelはMVCと呼ばれるアーキティクチャーで、それぞれが

M:model データ処理を担当
V:view 画面処理担当。表示用のテンプレートなど
C:controller 全体の制御担当。

となっています。

aritsanコマンドでコントローラー作成

php artisan make:controller コントローラー名

「app/Http/controller」フォルダ内に作成される。

アクション追加

HelloController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
  アクション
  }

class HelloController extends Controller
controllerのクラスを継承

{ アクション}
アクションメソットはここに入れる。

web.php
Route::get('hello','HelloController@index')

ルート情報の設定。
Route::get('hello','コントローラー名@アクション名')

まとめ

Qiita初投稿は自分の備忘録として使わせていただきました。
Laravelに慣れていないので、概念的な所を掴むのに苦労しています。

次はビューの部分をかじりつつ、実際にbladeテンプレートを作成してみたいと思います。

最後までご拝読ありがとうございました。

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