WEB/システム/IT技術ブログ

Laravel初心者の私ですが、テンプレートの共通部分に毎回同じ処理済みの値を渡したいケースがあり、その場合に全てのコントローラに同じ処理を書くのはイケてないなぁと考えてました。
例えば、設定ファイルやDBの値を取得、加工して、ヘッダのグロナビにデータを渡したい場合など、全画面で必要とする処理を共通化したかったのです。
調べてみたら、サービスプロバイダとビューコンポーザというしくを使えば目的を達成できそうなので、早速試してみました。

サービスプロバイダを作成する

まずはサービスプロバイダを作成します。サービスプロバイダは、任意のビューに対してコントローラとは別に一定の値を渡すことができます。
作成にはartisanコマンドで作成することができます。例えば共通ヘッダにセットする値を処理するHeaderServiceProviderを作成する場合、以下のコマンドで作成できます。

> php artisan make:provider HeaderServiceProvider

そうすると「/app/Providers/HeaderServiceProvider.php」ファイルが生成されます。中味は以下のとおりです。

namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class HeaderServiceProvider extends ServiceProvider
{
  public function register()
  {
  }

  public function boot()
  {
  }
}

Laravel 5.8で問い合わせフォームなどからメールを送信しようと思い、STMPの設定をしたのですがメール送信エラーになってしまいました。

Laravelでメールを送信するための設定は「.env」に記述します。以下、デフォルトの設定項目です。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

今回、xserverのSMTP(SSL)を使ってメールを送信しようと思い、以下のように設定しました。

MAIL_DRIVER=smtp
MAIL_HOST=xxxxx.xserver.jp
MAIL_PORT=465
MAIL_USERNAME=xxxxx@helog.jp
MAIL_PASSWORD=xxxxxxxx
MAIL_ENCRYPTION=ssl

メールを送信プログラムを実行すると、以下のエラーメッセージが表示され、メール送信に失敗します。

Expected response code 354 but got code "554", with message "554 5.5.1 Error: no valid recipients "

Laravelでミドルウェアを使ってみます。

フレームワークを設計する際に、度々、共通処理をどこに設置するのかということで悩みます。
先日もLaravel初心者の私がLaravelを設計しているときに、全ページで共通の処理を実行したいのだけどどうしよう?と調べていたらミドルウェアの情報にたどり着きました。
基本的にLaravelはMVCアーキテクチャを採用しているのですが、各リスエストを処理するコントローラとは別に、ミドルウェアというプログラムを用意して任意のリクエストに対して同じ処理を実行するしくみが用意されてるようです。

例えば、

  • 任意のチェック処理を一部リクエストに対して実行したい場合
  • 全ページに対して任意のデータを埋め込みたい場合

など、ミドルウェアとしてプログラムを用意して、好きなところに組み込むことができます。

ミドルウェアの新規作成

まずはミドルウェアを新規作成します。
ミドルウェアの作成は、自身でクラスファイルを用意してコードを記述してもよいですが、Laravelでは以下の便利なコマンドが用意されています。

> php artisan make:middleware SampleMiddleware

コマンドを実行すると、自動で以下のファイルが生成されます。

/app/Http/Middleware/SampleMiddleware.php

ファイルの中味は以下の通りです。

namespace App\Http\Middleware;
use Closure;
class SampleMiddleware
{
  public function handle($request, Closure $next)
  {
    return $next($request);
  }
}

今回内容解説については割愛しますが、このファイルをベースにプログラムを開発します。

最近、Laravel、FuelPHPやCakePHPなどパッケージをComposerで管理するのが当たり前になりました。
ところが、レンタルサーバxserverでComposerで実行するとエラーが発生しました。

$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - This package requires php ^7.1.3 but your HHVM version does not satisfy that requirement.
  Problem 2
    - beyondcode/laravel-dump-server 1.2.2 requires php ^7.1 -> your PHP version (5.4.16) does not satisfy that requirement.
    - beyondcode/laravel-dump-server 1.2.2 requires php ^7.1 -> your PHP version (5.4.16) does not satisfy that requirement.
    - Installation request for beyondcode/laravel-dump-server 1.2.2 -> satisfiable by beyondcode/laravel-dump-server[1.2.2].

コマンド実行にはPHP 7.1.3以上が必要だが、それを満たしてないというエラーのようです。
現在のバージョンを調べてみると確かにPHP 5.4.16です。

$ php -v
PHP 5.4.16 (cli) (built: Oct 30 2018 19:30:51)
Copyright (c) 1997-2013 The PHP Group

最近注目のlaravelはちょくちょく触っていますが、今回、本格的に習得してみようかと思い、改めてインストール方法から確認します。
Laravel – ウェブ職人のためのPHPフレームワーク

対象の環境は以下の通りです。

  • Windows 10 Home
  • Laravel 5.8
  • PHP 7.1.3

Laravel 5.8の動作環境としてPHP 7.1.3以上が必要です。

Laravelのインストール

LaravelのインストールにはComposerを使用します。
コマンドプロンプトを起動して、Composerを利用してLaravelインストーラをダウンロードします。

> composer global require laravel/installer

Composerのbinディレクトリにパスが設定されてることを前提に、例えば、sampleフォルダにLaravelをインストールするには以下のコマンドを実行します。

> laravel new sample

また、Composerでバージョンを指定してインストールすることもできます。

> composer create-project --prefer-dist laravel/laravel sample "5.8.*"

突然、ある日からWindows 10を起動すると「Microsoft Teams」なるものが起動してログインを要求するようになりました。
そんなものをインストールした覚えもないので、ウイルスに感染したのかと心配になりましたが、どうやらMicrosoft公式のアプリのようです。

何なのか分からないし、恐らく不要なのでアンインストールします。
アンインストールメニューから「Microsoft Teams」を選択し、アンインストールします。

Visual Studio Codeの拡張機能「PHP Debug」を使ってPHPをデバッグします。

PHP Debugは、PHPデバッグの定番である拡張モジュール「Xdebug」を使用してVSCode上でPHPデバッグを可能にする拡張機能です。

ちなみに今回、以下の環境で実現しました。

  • Windows 10 Home
  • PHP 7.4.27(xampp 7.4.27)
  • Visual Studio Code 1.63.2
  • Xdebug 3.1.2

PHP Debugのインストール

VSCodeの左メニューから「拡張機能」のアイコンをクリックして、「PHP Debug」を検索してインストールします。

PHP Debugのインストールは以上です。

Xdebugのインストール

xamppにはデフォルトでXdebug 2.8.1が用意されているのですが、今回は3.xを使用したいので、公式サイトからdllをダウンロードします。

Xdebug: Support; Tailored Installation Instructions
こちらのページでは「<?php phpinfo() ?>」または、コマンドから「php -i」を実行した結果から、最適なXdebugのインストール方法を診断してくれます。今回はコマンドの実行結果を貼り付け「Analyse my phpinfo() output」ボタンを押します。
すると、dllの設置方法が表示されます。その中から「php_xdebug-3.1.2-7.4-vc15-x86_64.dll」を入手し、xamppを設置しているディレクトリ「…/xampp/php/ext/」に設置します。

WindowsからLinuxサーバへSSH接続する時に、これまでずっとPuTTYを使っていました。
しかし、何となく古臭い感じがしていて、今の時代、もう少しスマートにならないかと調べてみたらありました。
2018年の春のWindows 10アップデートで標準でOpenSSHが組み込まれるようになったみたいです。
今回はこのWindows 10標準のOpenSSHの活用方法を調べたいと思います。

OpenSSHが使えるか確認する

念のため、事前に今使っているWindows 10にOpenSSHが入っているかどうか確認します。

スタートメニューから「アプリと機能」を起動し「オプション機能の管理」を開き、一覧に「OpenSSHクライアント」があれば利用できます。

また、コマンドプロンプトから「ssh -V」と入力してバージョン情報が出力されれば同じく利用できます。

> ssh -V
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5

Laravelを使った認証方法をいくつかあるようですが、Passportパッケージを使ったAPI認証の構築にチャレンジしてみます。

今回は、Facebook APIやTwitter APIのようなAPIを介してサービスを提供する側の認証や、vue.jsなどWebアプリを構築する際にサーバサイドへのアクセスに認証を設けるケースを想定します。

ちなみに、構築した環境は以下の通りです。

  • Windows 11 Home
  • PHP 7.3.33
  • Laravel 6.20.44

Passportパッケージをインストールと設定

Composerを使ってPassportパッケージをインストールします。私の場合、Laravel 6.xが最新のpassport 10.xに対応していないようだったので、一つバージョンを落としてインストールしました。

> composer require laravel/passport "^9.0"

次に、migrateを実行して、認証情報を保持するテーブルを作成します。

> php artisan migrate
Migrating: 2016_06_01_000001_create_oauth_auth_codes_table
Migrated:  2016_06_01_000001_create_oauth_auth_codes_table (0.06 seconds)
Migrating: 2016_06_01_000002_create_oauth_access_tokens_table
Migrated:  2016_06_01_000002_create_oauth_access_tokens_table (0.03 seconds)
Migrating: 2016_06_01_000003_create_oauth_refresh_tokens_table
Migrated:  2016_06_01_000003_create_oauth_refresh_tokens_table (0.03 seconds)
Migrating: 2016_06_01_000004_create_oauth_clients_table
Migrated:  2016_06_01_000004_create_oauth_clients_table (0.01 seconds)
Migrating: 2016_06_01_000005_create_oauth_personal_access_clients_table
Migrated:  2016_06_01_000005_create_oauth_personal_access_clients_table (0.01 seconds)

次に、例えばsample@helog.jpなどのユーザを追加します。
追加する方法はいくつかありますが、今回はお手軽なtinkerコマンドを使います。tinkerコマンドを使うと、コントローラ内のプログラムなどをコマンドラインから対話形式で実行できます。

> php artisan tinker
>>> App\User::create(['name' => 'sample', 'email' => 'sample@helog.jp', 'password' => bcrypt('xxxxxxxx')]);
=> App\User {
     name: "sample",
     email: "sample@helog.jp",
     updated_at: "2019-04-14 16:07:43",
     created_at: "2019-04-14 16:07:43",
     id: 1,
   }

次に、passport:clientコマンドを実行して、アクセストークンを取得するためにのIDとクライアントシークレットキーを取得します。
ここで生成されたクライアントIDとクライアントシークレットキーはメモしておきます。

世の中は常時SSL化が進んでおりますが、自身で管理するwebサーバの複数ドメインに無料SSL証明書「Let’s Encrypt」を適用させてみました。

環境は以下の通りです。

  • CentOS7
  • Apache 2.4.6

今回は仮に「helog.jp」と、virtualhostで設定してある「sample.helog.jp」をSSL化してみます。

事前確認

前提としてApacheのモジュール「mod_ssl」が必要です。以下のコマンドでインストールされているかどうかを確認します。

# https -M

リストに「ssl_module (shared)」があれば問題なしですが、無い場合には以下のようにしてインストールします。

# yum -y install mod_ssl

また、ファイアウォール設定でhttps用の443番ポート通過が許可されている必要があるので、以下のコマンドで確認します。

# firewall-cmd --list-all
...
  services: ssh http https
...

項目「services」に「https」の記述があれば問題なしです。

Monthly Archives