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

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

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

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

Q&A

解決済

1回答

613閲覧

Composerを使ってインスタンスからオートロードできません

dog57

総合スコア131

PHP

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

0グッド

0クリップ

投稿2018/05/11 04:34

編集2018/05/13 09:58

registration.php から SignupクラスをTwigを使って読み込もうとしているのですが、上手くいきません。

フォルダの階層
●registration.phpの階層
/var/www/html/Portfolio/public_html/registration_form.php
●SignupがあるSignup.phpの階層
/var/www/html/Portfolio/lib/Controller/Signup.php

エラー内容

Fatal error: Uncaught Error: Class 'MyApp\Controller\Signup' not found in /var/www/html/Portfolio/public_html/registration_form.php:7 Stack trace: #0 {main} thrown in /var/www/html/Portfolio/public_html/registration_form.php on line 7

registration.php

php

1<?php 2 3require_once('../config/config.php'); 4// Composerで作成されたautoload.phpを読み込む 5require_once('../vendor/autoload.php'); 6 7$app = new MyApp\Controller\Signup(); 8 9$app->run(); 10 11 12 13 14 15 16// 17// Twig 18// 19 20 21 22// Twig_Loader_Filesystem と Twig instance の生成を読み込む 23require_once('../config/twig.php'); 24 25 26 27// render 28echo $twig->render('registration_form.html', array( 29 30 'name' => $name, 31 'email' => $email, 32 'password' => $password, 33 'tel' => $tel, 34 'prefectures' => $prefectures, 35 'hobby' => $hobby, 36 'gender' => $gender, 37 'contact' => $contact, 38 'check_result' => $check_result 39 40 41 ) 42); 43

Signup.php

php

1<?php 2 3namespace MyApp\Controller; 4 5class Signup extends \MyApp\Controller { 6 7 public function run() { 8 9 if ($this->isLoggedIn()) { 10 11 header('Location:' . SITE_URL . '/login_users.php'); 12 exit; 13 14 } 15 16 if ($_SERVER['REQUEST_METHOD'] === 'POST') { 17 18 $this->postProcess(); 19 20 } 21 } 22 23 24 protected function postProcess() { 25 26 // Eメールのvalidate 27 try { 28 29 $this->_validate(); 30 31 } catch(\MyApp\Exception\InvalidEmail $e) { 32 33 $this->setErrors('email', $e->getMessage()); 34 35 } catch(\MyApp\Exception\InvalidPassword $e) { 36 37 $this->setErrors('password', $e->getMessage()); 38 39 } 40 41 $this->setValues('email', $_POST['email']); 42 $this->setValues('password', $_POST['password']); 43 44 45 if ($this->hasError()) { 46 47 return; 48 49 } 50 } 51 52 53} 54

/var/www/html/Portfolio/composer.json

{ "name": "twig/twig", "type": "library", "description": "Twig, the flexible, fast, and secure template language for PHP", "keywords": ["templating"], "homepage": "http://twig.sensiolabs.org", "license": "BSD-3-Clause", "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com", "homepage": "http://fabien.potencier.org", "role": "Lead Developer" }, { "name": "Twig Team", "homepage": "http://twig.sensiolabs.org/contributors", "role": "Contributors" }, { "name": "Armin Ronacher", "email": "armin.ronacher@active-4.com", "role": "Project Founder" } ], "support": { "forum": "https://groups.google.com/forum/#!forum/twig-users" }, "require": { "php": ">=5.3.3" }, "require-dev": { "symfony/phpunit-bridge": "~3.3@dev", "symfony/debug": "~2.7", "psr/container": "^1.0" }, "autoload": { "psr-0" : { "Twig_" : "lib/" }, "psr-4" : { "MyApp\" : "lib/", "MyApp\Controller\" : "lib/Controller/" } }, "extra": { "branch-alias": { "dev-master": "1.35-dev" } } }

lib/Controller.php (コントローラーの共通の処理)

<?php namespace MyApp; class Controller { }

どのように解決をしたらよろしいでしょうか?
ご教授いただけると嬉しいです。

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

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

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

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

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

m.ts10806

2018/05/11 05:56

どのようにautoloadと連携させていますか?composer.jsonには設定されているんでしょうか?
dog57

2018/05/11 06:37

composer.json につきましては質問欄の一番下にコードを追記致しました。
退会済みユーザー

退会済みユーザー

2018/05/11 14:05

そもそも twig のインストールの方法がまちがえてるようにみえるからな (名前が似たなにかなのか)
guest

回答1

0

ベストアンサー

composer.json

"MyApp\" : "lib",

ではないでしょうか(/libではなくlib)。

投稿2018/05/11 10:44

Lulucom

総合スコア1899

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

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

dog57

2018/05/11 10:47

ありがとうございます! ですが、上手く動きません。。。
Lulucom

2018/05/11 10:50

"MyApp\Controller" : "lib/Controller" は要らないのでは?
dog57

2018/05/11 10:55

そちらの方法でも解決できません。。。
Lulucom

2018/05/11 10:59

registration.phpで $app = new MyApp\Controller\Signup(); のところを $app = new \MyApp\Controller\Signup(); としてもダメですか?(
dog57

2018/05/11 11:23

変わらないですね。。
Lulucom

2018/05/11 12:06 編集

composer.json を修正したら、composer dump-autoload を実行しないと vendor/autoload.php に反映されないと思うのですが、それは大丈夫でしょうか?
dog57

2018/05/11 12:55

そちらのコマンドを実行すると下記のエラーが発生しました。 -bash: composer: コマンドが見つかりません
Lulucom

2018/05/11 12:59 編集

いつもはComposerをどうやって実行していますか? php composer.phar install とかでしょうか? もしそうだとすれば、php composer.phar dump-autoload と実行してください。
dog57

2018/05/11 13:13

はい、php composer.phar install で実行していました。 php composer.phar dump-autoload で実行すると、 Generating autoload files と表示されファイルが更新されましたが、 なぜか上手くいきません。。
dog57

2018/05/11 13:13

名前空間の設定がおかしいのでしょうか。。
Lulucom

2018/05/11 13:43

Signup.phpで class Signup extends \MyApp\Controller となっていますが、この親クラスMyApp\Controllerは存在するのですか?
dog57

2018/05/12 11:05 編集

はい、lib/Controller.php が 親クラスの MyApp を作成しています。 質問欄の一番下に追記致しました。
退会済みユーザー

退会済みユーザー

2018/05/12 11:01 編集

lib/MyApp.php じゃなく lib/Controller.php が存在するのかって聞いてる気がするが 中身は MyApp\Controller それだけじゃないきがするな とりあえず json ファイルを全部公開してはいかが?
dog57

2018/05/12 11:11 編集

composer.json ファイルの内容を質問欄に全て追記致しました。(Signup.php の下です)
Lulucom

2018/05/12 12:49

現在もエラー内容は質問に書かれている Class 'MyApp\Controller\Signup' not found というエラーなのでしょうか?
dog57

2018/05/13 04:52

php composer.phar dump-autoload  コマンドを実行したら下記のエラーが出るようになりました。 [Symfony\Component\Console\Exception\CommandNotFoundException] Command "dump-autoload " is not defined. Did you mean one of these? dump-autoload dumpautoload
Lulucom

2018/05/13 04:59

> "dump-autoload " 最後に全角スペースが入ってしまってるので、それを入れないようにしてください。
dog57

2018/05/13 05:39

ありがとうございます。 未だに解決に至りません。。。
Lulucom

2018/05/13 05:45

> 同じエラー というのはご質問文に書かれているエラー(...Class 'MyApp\Controller\Signup' not found...)ですか?
dog57

2018/05/13 09:48 編集

厳密には同じタイプのエラー内容でした。 エラー内容 Fatal error: Uncaught Error: Class myapp\japan\tokyo\Shinjuku not found in /var/www/html/Portfolio/public_html/index.php:8 Stack trace: #0 {main} thrown in /var/www/html/Portfolio/public_html/index.php on line 8
dog57

2018/05/13 09:51

もしかしたら、composerをphp composer.phar update コマンドでアップデートしてしまったので、それが原因で動かなくなったってことはありえますか?
Lulucom

2018/05/13 10:14

そういうことではないと思います。 > Class myapp\japan\tokyo\Shinjuku not found 同じようなエラーですが、今度は別のクラスですよね。 - そのクラスが正しいパスに存在しない - 名前空間やクラス名が間違っている(大小文字が違っている) とかではないでしょうか。
dog57

2018/05/15 10:47

解決致しました。 原因は、名前空間とフォルダが同じ名前ではなかったことが原因でした。 ・composer.json ファイルの "psr-4" : { "MyApp\" : "lib/", "MyApp\Controller\" : "lib/Controller/" } の "MyApp\" : "lib/", "MyApp\Controller\" : "lib/Controller/" を "lib\" : "lib/", "lib\Controller\" : "lib/Controller/" に変更した所解決致しました。 長い間お付き合いいただきありがとうございました!
退会済みユーザー

退会済みユーザー

2018/05/15 11:36

それちがうw "App\" : "src" が基本な symfony/skeleton
Lulucom

2018/05/15 12:02 編集

andrew57さん 当初の質問文のエラー `Class 'MyApp\Controller\Signup' not found` は、おそらく autoload の修正で解消されたのかと思います。 その次に出てたエラー `Class myapp\japan\tokyo\Shinjuku not found` は、おそらく namespace で `MyApp` とすべきところを `myapp` としてしまっていた、あるいはそのクラスが正しいパスに存在していなかった、あるいはスペリングのミスだった、とかではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問