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

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

ただいまの
回答率

90.54%

  • PHP

    20276questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 174

andrew57

score 110

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

require_once('../config/config.php');
// Composerで作成されたautoload.phpを読み込む
require_once('../vendor/autoload.php');

$app = new MyApp\Controller\Signup();

$app->run();






//
// Twig
//



// Twig_Loader_Filesystem と Twig instance の生成を読み込む
require_once('../config/twig.php');



// render
echo $twig->render('registration_form.html', array(

  'name' => $name,
  'email' => $email,
  'password' => $password,
  'tel' => $tel,
  'prefectures' => $prefectures,
  'hobby' => $hobby,
  'gender' => $gender,
  'contact' => $contact,
  'check_result' => $check_result


  )
);

Signup.php

<?php

namespace MyApp\Controller;

class Signup extends \MyApp\Controller {

  public function run() {

    if ($this->isLoggedIn()) {

      header('Location:' . SITE_URL . '/login_users.php');
      exit;

    }

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {

      $this->postProcess();

    }
  }


  protected function postProcess() {

    // Eメールのvalidate
    try {

        $this->_validate();

    } catch(\MyApp\Exception\InvalidEmail $e) {

      $this->setErrors('email', $e->getMessage());

    } catch(\MyApp\Exception\InvalidPassword $e) {

      $this->setErrors('password', $e->getMessage());

    }

    $this->setValues('email', $_POST['email']);
    $this->setValues('password', $_POST['password']);


    if ($this->hasError()) {

      return;

    }
  }


}

/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 {



}

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/05/11 14:56

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

    キャンセル

  • andrew57

    2018/05/11 15:37

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

    キャンセル

  • asahina1979

    2018/05/11 23:05

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

    キャンセル

回答 1

checkベストアンサー

+1

composer.json

            "MyApp\\" : "lib",

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/11 19:47

    ありがとうございます!

    ですが、上手く動きません。。。

    キャンセル

  • 2018/05/11 19:50

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

    キャンセル

  • 2018/05/11 19:55

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

    キャンセル

  • 2018/05/11 19:59

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

    キャンセル

  • 2018/05/11 20:23

    変わらないですね。。

    キャンセル

  • 2018/05/11 21:06 編集

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

    キャンセル

  • 2018/05/11 21:55

    そちらのコマンドを実行すると下記のエラーが発生しました。

    -bash: composer: コマンドが見つかりません

    キャンセル

  • 2018/05/11 21:58 編集

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

    キャンセル

  • 2018/05/11 22:13

    はい、php composer.phar install で実行していました。

    php composer.phar dump-autoload で実行すると、

    Generating autoload files と表示されファイルが更新されましたが、
    なぜか上手くいきません。。

    キャンセル

  • 2018/05/11 22:13

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

    キャンセル

  • 2018/05/11 22:43

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

    キャンセル

  • 2018/05/12 19:48 編集

    はい、lib/Controller.php が 親クラスの MyApp を作成しています。

    質問欄の一番下に追記致しました。

    キャンセル

  • 2018/05/12 19:59 編集

    lib/MyApp.php じゃなく lib/Controller.php が存在するのかって聞いてる気がするが

    中身は MyApp\Controller それだけじゃないきがするな

    とりあえず json ファイルを全部公開してはいかが?

    キャンセル

  • 2018/05/12 20:10 編集

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

    キャンセル

  • 2018/05/12 21:49

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

    キャンセル

  • 2018/05/13 13: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

    キャンセル

  • 2018/05/13 13:59

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

    キャンセル

  • 2018/05/13 14:39

    ありがとうございます。

    未だに解決に至りません。。。

    キャンセル

  • 2018/05/13 14:40

    https://qiita.com/atwata/items/5ba72d3d881a81227c2a

    こちらをそのまま同じことをしたのですが、
    また同じエラーが出てしまいました。

    キャンセル

  • 2018/05/13 14:45

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

    キャンセル

  • 2018/05/13 18: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

    キャンセル

  • 2018/05/13 18:51

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

    キャンセル

  • 2018/05/13 19:14

    そういうことではないと思います。

    > Class myapp\japan\tokyo\Shinjuku not found

    同じようなエラーですが、今度は別のクラスですよね。
    - そのクラスが正しいパスに存在しない
    - 名前空間やクラス名が間違っている(大小文字が違っている)
    とかではないでしょうか。

    キャンセル

  • 2018/05/15 19: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 20:36

    それちがうw

    "App\\" : "src"

    が基本な symfony/skeleton

    キャンセル

  • 2018/05/15 21:02 編集

    andrew57さん

    当初の質問文のエラー `Class 'MyApp\Controller\Signup' not found` は、おそらく autoload の修正で解消されたのかと思います。

    その次に出てたエラー `Class myapp\japan\tokyo\Shinjuku not found` は、おそらく namespace で `MyApp` とすべきところを `myapp` としてしまっていた、あるいはそのクラスが正しいパスに存在していなかった、あるいはスペリングのミスだった、とかではないでしょうか。

    キャンセル

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

  • ただいまの回答率 90.54%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20276questions

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