質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework 2

Zend Framework 2は、PHP 5.3以上に対応している MVCフレームワークとコンポーネントライブラリーの集合です。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

composer

Composerとは、PHP5.3.2以上で使用可能なパッケージ管理ツールです。指定ディレクトリ内だけでパッケージ管理します。

Q&A

解決済

2回答

3109閲覧

[PHP] composerによるクラスのオートロードについて

ms5025

総合スコア292

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework 2

Zend Framework 2は、PHP 5.3以上に対応している MVCフレームワークとコンポーネントライブラリーの集合です。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

composer

Composerとは、PHP5.3.2以上で使用可能なパッケージ管理ツールです。指定ディレクトリ内だけでパッケージ管理します。

0グッド

0クリップ

投稿2018/10/16 01:19

編集2018/10/18 00:06

前提・実現したいこと 

現在zendframework3でPHPの開発を行っています。
コントローラーで毎回自作のclassを

require_once('module/app/src/libs/hogehoge.php');
require_once('module/app/src/libs/hagehage.php');

のように読み込んで作成しています。
このように記述せず、画面ロード時に必要なファイルは全て読み込んでおきたいのですが、
どのように実装すればよいのでしょうか?

試したこと

Composerを使用してzendのクラスは読みこんでいます。
Composerに自分の作ったクラスを追加してみたのですが
やり方がおかしいのかうまくいきません。

該当のソースコード

JSON

1composer.json 2 "autoload": { 3 "psr-4": { 4 "Application\": "module/app/src/" 5 } 6 },

PHP

1autoload_psr4.php 2 3return array( 4 'Zend\View\' => array($vendorDir . '/zendframework/zend-view/src'), 5 'Zend\Feed\' => array($vendorDir . '/zendframework/zend-feed/src'), 6 'Zend\Debug\' => array($vendorDir . '/zendframework/zend-debug/src'), 7   ・・・(以下zendのファイルの読み込みが続く) 8 'Application\'=> array($baseDir . '/module/app/src'), 9  (↑ これが上記で毎回require_onceしているファイル群) 10);

PHP

1autoload_static.php 2 3 public static $prefixLengthsPsr4 = array( 4 'Z' => 5 array( 6 'Zend\View\' => 10, 7 'Zend\Validator\' => 15, 8       ・・・(zendのファイル軍) 9 ), 10 'A' => 11 array( 12 'Application\' => 12, 13 ), 14 15 ); 16 public static $prefixDirsPsr4 = array( 17 'Zend\View\' => 18 array( 19 0 => __DIR__ . '/..' . '/zendframework/zend-view/src', 20 ), 21 'Zend\Feed\' => 22 array( 23 0 => __DIR__ . '/..' . '/zendframework/zend-feed/src', 24 ), 25     (・・・zendのファイル軍) 26 'Application\' => 27 array( 28 0 => __DIR__ . '/../..' . '/module/app/src', 29 30 ), 31 32 ); 33

試したこと

上記のファイルに記入しただけでは動かないのでしょうか?
netbeansを使用しているのですが、上記のファイルに追加記述して
メニューのコンポーザ→更新すると何度やっても記述が消えているので、
ファイルを更新しただけで動かしていました。
一応XAMPPの再起動やキャッシュを行っています
(このやり方でzendのファイルは追加使用可能でした)


メニューのコンポーザ→「自己更新」で更新できましたがうまくいきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

composer.jsonのautoloadにclassmapを追加し、
オートロードしたい独自クラスがあるパスを記入して、
composerの更新をすればうまくいきました。

php

1 composer.json 2 "autoload": { 3 "psr-4": { 4 "Application\": "module/app/src/" 5 } 6 }, 7 "classmap": [ 8 "module/app/src/libs/", 9 "module/app/model/" 10 ] 11 },

あとno-devオプションの更新にしてなかった等いろいろ要因があったかともうのですが
とりあえずうまくいきました。

けどこのやり方よりこうしたほうがいいよ等がありましたら意見お願いします。

投稿2018/10/19 00:43

編集2018/10/19 01:08
ms5025

総合スコア292

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

基本的に vendor ディレクトリ内のファイルを直接いじることはないです。
composer.json を修正した場合は composer update で反映させる必要があります。

投稿2018/10/16 06:02

IshibashiTanaka

総合スコア152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ms5025

2018/10/16 06:07

composer updateで反映させました。 それでもできませんでした。 とても困っています。何か思い当たることがあれば なんでも指摘お願いします。 composer.json に"Application\": "module/app/src/" を追加して更新してみました。 autoload_psr4.php と autoload_static.php に記述が追加されているところも確認しました。 キャッシュもクリアして 再起動もしてみましたが、結局 module/app/src/配下のクラスファイルは require_onceしなければ「みつかりません」とエラーが出てしまいます。 何故・・
IshibashiTanaka

2018/10/16 07:30

「みつかりません」より、できればエラーメッセージはそのまま書いてほしいです。 `libs/hogehoge.php` の中身はどうなっていますか? `namespace` の設定はされていますか?
ms5025

2018/10/18 00:05

返答遅くなって申し訳ありません。 メッセージは。Class 'Application\Libs\hogehoge' not foundです。 libs/hogehoge.phpは <?php namespace Application\Libs; use Exception; (以下使用するuse文~) require_once('module/app/model/common/areare.php'); (以下使用するクラスのrequire_once~[これをしたくないのでオートロードしたい]) class hogehoge { ~ クラスの記述 } といった感じです。 名前空間のつけ方がおかしいのでしょうか?
退会済みユーザー

退会済みユーザー

2018/10/18 00:15

大文字小文字がいっちしてないね・・・
ms5025

2018/10/18 00:28

どこですか? ちなみにhogehoge、は実際はLibs_hogehogeというクラス名ですが、それでもアウトですか? どこの大文字と小文字が違うんでしょうか?
ms5025

2018/10/18 00:32

Application\Libs\ というのは名前空間であって 実ファイルが module/app/src/libs/Libs_hogehoge.php class Libs_hogehoge{ ~ クラスの記述 } といった感じなのですが、命名や名前空間がおかしいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問