Quantcast
Channel: laravel5.8タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 87

requireなしでクラスをuseできるようにする

$
0
0

autoloadはファイルを自動で読み込む仕組みのことで、requireなしでuse演算子を定義するだけでPHPのクラスを使えるようにする機能。

Composerがインストールされていることを確認する

require文の代わりにComposerのオートロード機能を使用します。
laravelでプロジェクトを作成する際にcomposerコマンドを使用しているのでインストールされていると思われるのですが、composerがなければインストールする。

※composerがインストールされている場合、composerと打つとでてきました
図1.png

composer.jsonに追記する

読み込んでほしいファイルや、名前空間のあるファイルをcomposer.jsonのautoload内のpsr-4部分に追記していく

Composerのオートロードでつかう名前空間(namespace)とは
【PHP超入門】名前空間(namespace・use)について

 

psr-4とは

psr-4は入力規約のことで、
psr-0は2014年10月以降非推奨となっており、新しいプロジェクトではpsr-4の規約を使うことが推奨されており、psr-4はpsr-0に変わる新しい規約とのこと

psr-0での、名前空間つきクラス名とファイルパスについての特徴

 - 名前空間の\をディレクトリセパレーター/に置き換える
 - クラス名の_をディレクトリセパレータ/に置き換える
 - 最後に.phpを付ける

psr-4での、名前空間つきクラス名とファイルパスについてのpsr-0からの主な変更点

 - 名前空間接頭語に対して任意のディレクトリを設定できる。
 - クラス名の _は特別な意味を持たない

  例えばTest_Classだった場合は下記になる
  psr-0:  /〜/Test/Class.php
  psr-4:  /〜/Test_Class.php

composer.jsonに追記する

例えば、下記のようなファイル構成の時、Testディレクトリに読み込んでほしいファイル、名前空間があったらcomposer.jsonのautoload部分に追記します。(※laravelの場合)

Project
 ├─ app
 │ ├─ Console
 │ (略)
 │ ├─ Models
 │ │ └─ Test 
 │ └─ Providers
 ├─ bootstrap
 ├─ config
 ├─ database
 ├─ public
 ├─ resources
 ├─ routes
 ├─ storage
 ├─ tests
 ├─ vendor
 │ (略)
 │ └─ composer
 │   (略)
 │   ├─ autoload_classmap.php 
 │   └─ autoload_psr4.php
 ├─ view
 ├─ .env
 ├─ composer.json
 ├─ composer.lock
 (略)
 └─ yarn.lock

※namespace名は大文字からはじめなければならないので注意
記述方法は
設定したい名前空間\\ : 対応するベースディレクトリ

"autoload":{"psr-4":{"App\\":"app/","Test\\":"app/Models/Test"//追記},"classmap":["database/seeds","database/factories"]},

composer.jsonを編集した後は下記コマンドを実行してcomposer.jsonの構文チェックする

$ composer validate

composer validate実行後、問題なければ下記コマンドを実行する

$ composer dump-autoload

autoload_psr4を確認する

composer.jsonで、psr4のautoload登録をしたので、autoload_psr4.phpファイルが更新されているか確認する。

<?php// autoload_psr4.php @generated by Composer$vendorDir=dirname(dirname(__FILE__));$baseDir=dirname($vendorDir);returnarray(()'Test\\'=>array($baseDir.'/app/Models/Test'),);

requireなしでも下記のように使えるようになっている!

<?phpnamespaceApp\Http\Controllers;useTest\TestClass;ClassTestController{

 

まとめ

新しいディレクトリを作ったら忘れずにautoloadする。
composerを使うとディレクトリが増えるたびにdump-autoloadするのが面倒だったりもするというデメリットもあるとのことです。


Viewing all articles
Browse latest Browse all 87

Trending Articles