20200702のlaravelに関する記事は7件です。

DockerでLaravelの開発環境を構築する方法

docker.png

本記事ではLaradockを使わずにできるだけシンプルにLaravelの環境構築を行っていきます。

任意の場所にディレクトリを作成

$ mkdir myproject
$ cd myproject

docker-compose.ymlファイルの作成

docker-compose.yml
version: '3.7'

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: php
    volumes:
      - ./src:/var/www/html
    ports:
      - "9000:9000"
  mysql:
    image: mysql:5.7
    container_name: mysql
    ports:
      -  "3306:3306"
    volumes:
      -  ./db:/var/lib/mysql
      -  ./my_conf:/etc/mysql/conf.d
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: laravel
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      -  "8080:80"
    volumes:
      -  ./src:/var/www/html
      -  ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      -  php
      -  mysql

Dockerfileの作成

Dockerfile
FROM php:7.4-fpm-alpine

RUN docker-php-ext-install pdo pdo_mysql

Volumesの作成

$ mkdir db
$ mkdir my_conf

my_confディレクトリにmysql5.7.cnfを作成し、日本語対応できるように文字コードの設定を行います。

mysql5.7.cnf
[mysqld]
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4

Nginxの設定ファイルを作成

$ mkdir nginx

nginxディレクトリにdefault.confを作成します。

default.conf
server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri = 404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

コンテナの作成

$ docker-compose up -d

コンテナのステータスを確認

$ docker-compose ps -a

Laravelのインストール

$ docker run --rm -v /src:/app composer create-project --prefer-dist laravel/laravel .

データベースへの接続

srcディレクトリ内にある.envファイルを下記の通り編集してください。

.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=password

.envファイルの設定が終わったら、下記のコマンドを実行してデータベースにテーブルが作成されるか確認します。

$ docker-compose exec php php artisan migrate

開発サーバの起動

$ docker exec -it php php artisan serve --host=0.0.0.0 --port=8000

上記のコマンドを実行後、ブラウザで127.0.0.1:8080にアクセスするとLaravelのスタートページが表示されます。

img1.png

これでLaravelにNginx経由でアクセスし、MySQLデータベースへのデータの登録まで行えることを確認しました。

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

Cloud9でLaravelの開発環境を構築する方法

laravel.jpg

AWSマネジメントコンソールからCloud9を選択

img1.png

Create environmentを選択

img2.png

プロジェクト名を入力し、Next stepを選択

ここではlaravel_projectとします。

img3.png

特にこだわりがなければデフォルトのままNext stepを選択

img4.png

設定に変更がなければCreate environmentを選択

すると画面が切り替わってCloud9が起動しますので、操作できるようになるまでしばらく待ちます。

img5.png

PHPをアップデート

$ sudo yum -y update
$ sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo yum -y install php73 php73-mbstring php73-pdo php73-mysqlnd // PHP7.3をインストール
$ sudo unlink /usr/bin/php // リンクがPHP5.6に貼られているので解除
$ sudo ln -s /etc/alternatives/php7 /usr/bin/php // リンクをPHP7.3に張り替え
$ php -v

バージョンを確認して下記のように表示されればリンク設定まで完了です。

PHP 7.3.17 (cli) (built: May  7 2020 21:04:09) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.17, Copyright (c) 1998-2018 Zend Technologies

Composerをインストール

ComposerはPHPのライブラリ管理ツールです。RubyでいうところのGemに該当します。

$ curl -sS https://getcomposer.org/installer | php // composer.pharが自動で生成される
$ sudo mv composer.phar /usr/local/bin/composer // composer.pharを移動させる

Composerが正常にインストールされたか、下記のコマンドにて確認します。

$ composer

「Composer」という文字の、大きなアスキーアートが表示されれば完了です。

スワップファイルを作成

現時点でLaravelプロジェクトを作成しようとすると、メモリ不足で失敗します。そこでスワップファイルを作成します。

$ sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
$ sudo /sbin/mkswap /var/swap.1
$ sudo /sbin/swapon /var/swap.1

Laravelプロジェクトを作成

$ composer create-project laravel/laravel ./myapp --prefer-dist

ディレクトリ内にmyappが作成されます。

Laravelサーバの起動

$ cd myapp
$ php artisan serve --port=8080

上記のコマンドを実行後、次のように表示されれば起動は完了です。

$ Laravel development server started: http://127.0.0.1:8080

Cloud9画面上のメニューのPreviewを押し、「Preview Running Application」を実行すると下の画面のように表示されます。

img6.png

無事Cloud9にLaravelを導入することができました。

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

LaravelアプリをHerokuにデプロイする方法

laravel_heroku.png

HerokuGitがない方は事前にインストールしておいてください。

Laravelプロジェクトの作成

$ laravel new myapp

Herokuにローカルからログイン

$ heroku login

Herokuにリポジトリを作成

$ heroku create リポジトリ名 --buildpack heroku/php

LaravelアプリのソースコードをHerokuにプッシュ

$ git init
$ heroku git:remote -a リポジトリ名
$ git add .
$ git commit -m "initial commit"
$ git push heroku master

Laravelプロジェクト直下にProcfileを作成

$ touch Procfile
$ echo 'web: vendor/bin/heroku-php-apache2 public' >> Procfile

ProcfileをHerokuにプッシュ

$ git add .
$ git commit -m "add Procfile"
$ git push heroku master

HerokuにPostgreSQLを導入

$ heroku addons:create heroku-postgresql:hobby-dev

データベース接続に必要な情報を確認

$ heroku config:get DATABASE_URL // コマンドを実行すると下記のように表示されます
postgres://ユーザー名:パスワード@ホスト名:5432/データベース名

Herokuに設定を追加

$ heroku config:set\
DB_CONNECTION=pgsql\
DB_USERNAME=ユーザー名\
DB_PASSWORD=パスワード\
DB_HOST=ホスト\
DB_DATABASE=データベース名\

マイグレーションの実行

$ heroku run php artisan migrate

インターネット上で閲覧できるように設定を追加

$ heroku config:set DEBUGBAR_ENABLED=true
$ heroku config:set APP_KEY=$(php artisan key:generate --show)

ブラウザで確認

$ heroku open

ブラウザで何の問題もなく表示されればデプロイ成功です。

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

【Laravel】自作ヘルパー

ヘルパーを自作する

ページのタイトル名を返すヘルパーを例にヘルパーの作り方を説明してみる
手順は以下のとおり

 1. helpers.phpを作成
 2. composer.jsonへの追加
 3. composer dump-autoload コマンドの実行

手順1

appフォルダ以下にhelper.phpを作って、作りたいヘルパーを定義

app/helper.php
<?php
function full_title($title=null) {
    $app_name = config('app.name', 'Laravel');
    if ($title != null) {
        return $title . ' - ' . $app_name ;
    }
    return $app_name;
}
?>

手順2

composer.jsonのautoloadの項目にヘルパーを定義したファイルのパスを追加

composer.json
"autoload": {
        ...(省略)...
        "files": [
            "app/helpers.php"
        ]
    }

手順3

composer.jsonにパスを追加しただけでは機能しない
以下のコマンドを実行

% composer dump-autoload

使用例

<title>full_title('Home')</title>

上の例では「Home - Laravel」といったタイトルになる

おわり

簡単でしたね
Laravel側で用意しているヘルパーがたくさんあるので、Readoubleを一読してみてはどうかな?

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

Vue.js・Laravel・OpenBDで本の画像を表示!書籍管理アプリで表紙の画像が表示できるようになりました。 #BookMark

どうも、たかふみです。
Vue.jsを使って本の画像表示をやってみました。
詳細_変更前後.png
結果、これがこうなりまして、本の詳細画面に遷移した時に書籍画像が表示されるようになっています。

Vue.js・Laravelでの画像表示については⬇︎こちらのチュートリアルのお陰でできました!
段階的に書かれていて分かりやすかったです!

■Vue + Vue Router + Vuex + Laravelで写真共有アプリを作ろう
https://www.hypertextcandy.com/vue-laravel-tutorial-introduction/

画面

書籍詳細画面.png

コード

■blade(該当部分のみ)

show.blade.php
<div class="card-header">詳細</div>
<book-image-component></book-image-component>

■VueComponent

BookImageComponent.vue
<template>
  <div v-if="photoUrl" class="photo-detail bookimage">
    <figure class="photo-detail__pane photo-detail__image">
      <img :src="photoUrl" alt="">
    </figure>
  </div>
</template>

<script>
export default {
  data () {
    return {
      photoUrl: null
    }
  },
  methods: {
    // URLから特定のパラメータを取得
    getParam(name, url) {
      if (!url) url = window.location.href;
      name = name.replace(/[\[\]]/g, "\\$&");
      var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
          results = regex.exec(url);
      if (!results) return null;
      if (!results[2]) return '';
      return decodeURIComponent(results[2].replace(/\+/g, " "));
    },
    // isbnコードから画像URLを取得
    async fetchPhoto () {
      const isbn =this.getParam('isbn');
      const response = await axios.get('https://api.openbd.jp/v1/get?isbn='+isbn)

      if(response.data[0] == null){
        this.photoUrl = null
      } else {
        this.photoUrl = response.data[0].summary.cover;
      }
    }
  },
  watch: {
    $route: {
      async handler () {
        await this.fetchPhoto()
      },
      immediate: true
    }
  }
}
</script>

コード説明

詳細画面

手順

1.どうやって画像表示するか考える
2.書籍の画像を表示するためのVueコンポーネントを作る
3.確認

1.どうやって画像表示するか考える

書籍詳細画面.png

今回、画像表示をするためにOpenBDという書籍情報取得APIを使いました。
このAPIではISBNコード(書籍のIDみたいなもの)をリクエストに書籍情報を取得することができます。レスポンス内に画像URLがあるので、これを使って画面に書籍画像を表示します。
※OpenBDについては後ほど記載します。

ISBNコードはURL内のパラメータを取得してリクエストすることにしました。

2.書籍の画像を表示するためのVueコンポーネントを作る

書籍画像以外の情報についてはLaravelの方で実装を行っていたので、画像の部分だけコンポーネント化しています。

BookImageComponent.vue
<template>
  <div v-if="photoUrl" class="photo-detail bookimage">
    <figure class="photo-detail__pane photo-detail__image">
      <img :src="photoUrl" alt="">
    </figure>
  </div>
</template>

<script>
export default {
  data () {
    return {
      photoUrl: null
    }
  },
  methods: {
    // URLから特定のパラメータを取得
    getParam(name, url) {
      if (!url) url = window.location.href;
      name = name.replace(/[\[\]]/g, "\\$&");
      var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
          results = regex.exec(url);
      if (!results) return null;
      if (!results[2]) return '';
      return decodeURIComponent(results[2].replace(/\+/g, " "));
    },
    // isbnコードから画像URLを取得
    async fetchPhoto () {
      const isbn =this.getParam('isbn');
      const response = await axios.get('https://api.openbd.jp/v1/get?isbn='+isbn)

      if(response.data[0] == null){
        this.photoUrl = null
      } else {
        this.photoUrl = response.data[0].summary.cover;
      }
    }
  },
  watch: {
    $route: {
      async handler () {
        await this.fetchPhoto()
      },
      immediate: true
    }
  }
}
</script>
■URLから特定のパラメータを取得

URLからISBNコードを取得する必要があったので、下記のサイトで紹介されていたメソッドを使いました。

■Javascript でURLのパラメータを取得する方法
http://www-creators.com/archives/4463

URLから特定のパラメータを取得
getParam(name, url) {
  if (!url) url = window.location.href;
  name = name.replace(/[\[\]]/g, "\\$&");
  var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
      results = regex.exec(url);
  if (!results) return null;
  if (!results[2]) return '';
  return decodeURIComponent(results[2].replace(/\+/g, " "));
}
■isbnコードから画像URLを取得

上のメソッドを使い、ISBNコードを変数isbnへ入れてから、openBDのAPIへリクエストを行います。response.data[0].summary.coverで画像urlがレスポンスされるのでthis.photUrlへ入れます。

openBDへリクエスト
async fetchPhoto () {
  const isbn =this.getParam('isbn');
  const response = await axios.get('https://api.openbd.jp/v1/get?isbn='+isbn)
  if(response.data[0] == null){
    this.photoUrl = null
  } else {
    this.photoUrl = response.data[0].summary.cover;
  }
}
■photUrlをvindして画像を表示

上のメソッドで画像urlがphotUrlへ入るので、画面上に書籍画像が表示されます。

photUrlをvindして画像を表示
<figure class="photo-detail__pane photo-detail__image">
  <img :src="photoUrl" alt="">
</figure>

3.確認

表示されていれば成功です。

詳細_変更後.png

OpenBDとは

書籍情報の取得ができるAPIです。
書籍APIにはAmazonや楽天のAPIもあるのですが、「会員登録が不要・レスポンスが高速・レスポンスに画像URLを含んでいる」ことからOpenBDに決めました。

■openBD
https://openbd.jp/

まとめ:チュートリアルの復習にもなって良かった。

画像が表示できたことで見たい本が探しやすくなりました。
今回の実装でこちらのサイトを参考にしました。チュートリアルの復習にもなったので良かったです。

本記事の書籍管理アプリ「BookMark」は引き続き開発中です!
⬇︎こちらから実際の画面を確認できます。
https://bookmark-tm.herokuapp.com/

それでは!

参考URL

■Laravel + Vue での画像表示について
・Vue + Vue Router + Vuex + Laravelで写真共有アプリを作ろう
https://www.hypertextcandy.com/vue-laravel-tutorial-introduction/

■書籍APIについて
・書籍検索APIのリクエストパラメータ・取得値考察
 https://qiita.com/kanary/items/5ec45bbc01efd4388fdb

・国立国会図書館サーチが提供する書影API
https://iss.ndl.go.jp/information/api/api-lists/thumbnail_info/

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

Laravel Log singleログとdailyログを同時に出力する

目的

  • Laravelのログ出力にて二種のログを同時出力する方法をまとめる

実施環境

  • MacのローカルにLaravelの環境を構築して実施する。環境構築手順の記事はリンクを後述する。
  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.5)
ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
プロセッサ 2 GHz クアッドコアIntel Core i5
メモリ 32 GB 3733 MHz LPDDR4
グラフィックス Intel Iris Plus Graphics 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.3 Homwbrewを用いて導入
Laravel バージョン 7.0.8 commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする

前提条件

前提情報

  • ログの出力に関して若干の知識がある物として説明を行う。おそらく一旦ログの出力を経験した方が理解が早いかもしれない。下記にログ出力方法の最短方法を記載した記事のリンクを記載する。
  • 今回説明する方法を応用すればdailyログとerrorログを別ファイルに出力することも可能になる考える。
  • 説明の便宜上、アプリ作成部分から記載するが各の環境に沿って読み飛ばしていただきたい。

読後感

  • singleログをアプリ名ディレクトリ/storage/logs/直下のsingle.logsファイルに、dailyログをアプリ名ディレクトリ/storage/logs/直下のdaily-YYYY-MM-DD.logファイルに[YYYY-MM-DD HH:MM:SS] local.DEBUG: testと言う文字列を出力することができる。

singleログとdailyログ

※singleログとdailyログはログチャンネル(ログを行う設定の種類)の名前である。

  • singleログ
    • Laravelアプリのログをアプリ名ディレクトリ/storage/logs/直下のlaravel.logファイルに出力するログのチャンネルのこと。(一個のログファイルのみにログを出力する方法と思っていただきたい。)
    • デフォルトではこのチャンネルが有効になっている。
  • dailyログ
    • Laravelアプリのログをアプリ名ディレクトリ/storage/logs/直下のlaravel-YYYY-MM-DD.logに日毎に分けて出力するログのチャンネルのこと。(singleログを日毎に分けた物と思っていただきたい。)
    • デフォルト設定では14日経過したdailyログは削除される。

概要

  1. アプリ作成
  2. ルーティングの記載
  3. UserHomeController作成と記載
  4. singleログ出力確認
  5. ログの設定変更
  6. 確認

詳細

  1. アプリ作成

    1. アプリを作成する任意のディレクトリに移動して下記コマンドを実行して「test」と言う名前のアプリを作成する。

      $ laravel new test
      
  2. ルーティングの記載

    1. testディレクトリで下記コマンドを実行してルーティングファイルを開く。

      $ routes/web.php
      
    2. 開いたルーティングファイルに下記の一行を記載する。

      routes/web.php
      Route::get('/user_home', 'UserHomeController@index');
      
    3. 記載後のルーティングファイルの内容を下記に記載する。

      routes/web.php
      <?php
      
      use Illuminate\Support\Facades\Route;
      
      /*
      |--------------------------------------------------------------------------
      | Web Routes
      |--------------------------------------------------------------------------
      |
      | Here is where you can register web routes for your application. These
      | routes are loaded by the RouteServiceProvider within a group which
      | contains the "web" middleware group. Now create something great!
      |
      */
      
      Route::get('/', function () {
          return view('welcome');
      });
      
      Route::get('/user_home', 'UserHomeController@index');
      
    4. 保存して閉じる。

  3. UserHomeController作成と記載

    1. testディレクトリで下記コマンドを実行してUserHomeController.phpを作成する。

      $ php artisan make:controller UserHomeController
      
    2. 下記コマンドを実行して先のコマンドで作成したUserHomeController.phpを開く。

      $ vi app/Http/Controllers/UserHomeController.php
      
    3. 開いたUserHomeController.phpを下記の様に修正する。

      test/app/Http/Controllers/UserHomeController.php
      <?php
      
      namespace App\Http\Controllers;
      
      use Illuminate\Http\Request;
      //下記を追記する、下記の宣言がないとエラーになる
      use Illuminate\Support\Facades\Log;
      
      class UserHomeController extends Controller
      {
          //下記を追記する
          public function index()
          {
              //Log::debug('ログとして出力したい文字列')の様に記載する
              Log::debug('test');
              return redirect('/');
          }
          //上記までを追記する。
      }
      
    4. 保存して閉じる。

  4. singleログ出力確認

    1. testディレクトリで下記コマンドを実行してまだlogファイルが存在していないことを確認する。「No such file or directory」が出力されればsingle.logファイルとdaily.logは存在しない。

      $ ls storage/logs/laravel.log
      >ls: storage/logs/laravel.log: No such file or directory
      
    2. testディレクトリで下記コマンドを実行してローカルサーバを起動する。

      $ php artisan serve
      
    3. ブラウザからtestアプリにアクセスする。デフォルトだとhttp://127.0.0.1:8000/にアクセスするとブラウザでtestアプリが表示できる。

    4. 下記画面が表示されていることを確認する。

      Laravel.png

    5. http://127.0.0.1:8000/user_homeにアクセスしてみる。(アクセスしても何も起こらず、先の画像と同じLaravelのトップページが表示されると思うがその動作は期待する動作である。)

    6. testディレクトリで下記コマンドを実行してログファイルを開く。

      $ less storage/logs/laravel.log
      
    7. 下記の一行が記載されていることを確認する。(YYYY-MM-DD HH:MM:SSはみなさんがhttp://127.0.0.1:8000/user_homeにアクセスした時間が入る。)

      test/storage/logs/laravel.log
      [YYYY-MM-DD HH:MM:SS] local.DEBUG: test 
      
  5. ログの設定変更

    1. testディレクトリで下記コマンドを実行してログの設定ファイルを開く。

      $ vi config/logging.php
      
    2. 開いた設定ファイルを下記の様に修正する。

      test/config/logging.php
      <?php
      
      use Monolog\Handler\NullHandler;
      use Monolog\Handler\StreamHandler;
      use Monolog\Handler\SyslogUdpHandler;
      
      return [
      
          /*
          |--------------------------------------------------------------------------
          | Default Log Channel
          |--------------------------------------------------------------------------
          |
          | This option defines the default log channel that gets used when writing
          | messages to the logs. The name specified in this option should match
          | one of the channels defined in the "channels" configuration array.
          |
          */
      
          'default' => env('LOG_CHANNEL', 'stack'),
      
          /*
          |--------------------------------------------------------------------------
          | Log Channels
          |--------------------------------------------------------------------------
          |
          | Here you may configure the log channels for your application. Out of
          | the box, Laravel uses the Monolog PHP logging library. This gives
          | you a variety of powerful log handlers / formatters to utilize.
          |
          | Available Drivers: "single", "daily", "slack", "syslog",
          |                    "errorlog", "monolog",
          |                    "custom", "stack"
          |
          */
      
          'channels' => [
              'stack' => [
                  'driver' => 'stack',
                  //下記修正・追記する
                  'channels' => [
                      'single',
                      'daily',
                  ],
                  'ignore_exceptions' => false,
              ],
      
              'single' => [
                  'driver' => 'single',
                  //下記を修正する
                  'path' => storage_path('logs/single.log'),
                  'level' => 'debug',
              ],
      
              'daily' => [
                  'driver' => 'daily',
                  //下記を修正する
                  'path' => storage_path('logs/daily.log'),
                  'level' => 'debug',
                  'days' => 14,
              ],
      
              'slack' => [
                  'driver' => 'slack',
                  'url' => env('LOG_SLACK_WEBHOOK_URL'),
                  'username' => 'Laravel Log',
                  'emoji' => ':boom:',
                  'level' => 'critical',
              ],
      
              'papertrail' => [
                  'driver' => 'monolog',
                  'level' => 'debug',
                  'handler' => SyslogUdpHandler::class,
                  'handler_with' => [
                      'host' => env('PAPERTRAIL_URL'),
                      'port' => env('PAPERTRAIL_PORT'),
                  ],
              ],
      
              'stderr' => [
                  'driver' => 'monolog',
                  'handler' => StreamHandler::class,
                  'formatter' => env('LOG_STDERR_FORMATTER'),
                  'with' => [
                      'stream' => 'php://stderr',
                  ],
              ],
      
              'syslog' => [
                  'driver' => 'syslog',
                  'level' => 'debug',
              ],
      
              'errorlog' => [
                  'driver' => 'errorlog',
                  'level' => 'debug',
              ],
      
              'null' => [
                  'driver' => 'monolog',
                  'handler' => NullHandler::class,
              ],
      
              'emergency' => [
                  'path' => storage_path('logs/laravel.log'),
              ],
          ],
      
      ];
      
  6. 確認

    1. testディレクトリで下記コマンドを実行してまだlogファイルが存在していないことを確認する。「No such file or directory」が出力されればsingle.logファイルとdaily.logは存在しない。

      $ ls storage/logs/single.log
      >ls: storage/logs/single.log: No such file or directory
      $ ls storage/logs/daily*
      >ls: storage/logs/daily*: No such file or directory
      
    2. testディレクトリで下記コマンドを実行してローカルサーバを起動する。

      $ php artisan serve
      
    3. ブラウザからtestアプリにアクセスする。デフォルトだとhttp://127.0.0.1:8000/にアクセスするとブラウザでtestアプリが表示できる。

    4. 下記画面が表示されていることを確認する。

      Laravel.png

    5. http://127.0.0.1:8000/user_homeにアクセスしてみる。(アクセスしても何も起こらず、先の画像と同じLaravelのトップページが表示されると思うがその動作は期待する動作である。)

    6. testディレクトリで下記コマンドを実行してログファイルを開く。

      $ less storage/logs/single.log
      
    7. 二つのファイルに下記の一行が記載されていることを確認する。(YYYY-MM-DD HH:MM:SSはみなさんがhttp://127.0.0.1:8000/user_homeにアクセスした時間が入る。)

      test/storage/logs/laravel.log
      [YYYY-MM-DD HH:MM:SS] local.DEBUG: test 
      
    8. 正常に書き込まれていた場合作業完了となる。

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

【Laravel】配列のバリデーション

フォームのフィールドが配列の場合のバリデーションについてのメモです。

ドット記法

配列に対してバリデーションを行うためにはドット記法を使い、.で配列の階層を表します。また*で配列内すべてを表します。

//photos[profile]フィールドを指定
$validator = Validator::make($request->all(), [
    'photos.profile' => 'required|image',
]);

//keywordフィールドすべてを指定
$validator = Validator::make($request->all(), [
    'keyword.*' => 'required|max:20',
]);

エラーメッセージの取得

Illuminate\Support\ViewErrorBag {
  #bags: array:1 [
    "default" => Illuminate\Support\MessageBag {
      #messages: array:2 [
        "keyword.0" => array:1 [
          0 => "キーワードは、20文字以下で指定してください。"
        ]
        "keyword.1" => array:1 [
          0 => "キーワードは、20文字以下で指定してください。"
        ]
        "keyword.2" => array:1 [
          0 => "キーワードは、20文字以下で指定してください。"
        ]
      ]
      #format: ":message"
    }
  ]
}

配列にバリデーションを設定した場合、エラーメッセージも配列で返ってくるため、取得もドット記法で行います。

foreach ($errors->get('keyword.*') as $messages) {
    foreach ($messages as $message){
       //
    }
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む