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

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

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

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

1回答

1654閲覧

PHPでのログイン機能実装について

hiyokorunner

総合スコア18

PHP

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

1クリップ

投稿2018/08/12 04:48

編集2018/08/16 03:33

前提・実現したいこと

PHPでログイン機能を実装しています。

"ドットインストール"の内容です。
「PHPでログイン機能を実装しよう:#08 ログイン画面を作っていこう」

Webサーバにアクセスしようとしたところ、以下のようなエラーメッセージが発生しました。

発生している問題・エラーメッセージ

Fatal error: Class 'MyApp\Controller\Index' not found in /home/vagrant/sns_php/public_html/index.php on line 7

該当のソースコード

PHP

1//vagrant/sns_php/public_html/index.php 2 3<?php 4 5require_once(__DIR__ . '/../config/config.php'); 6 7$app = new MyApp\Controller\Index(); 8 9$app->run();

PHP

1//vagrant/sns_php/lib/Controller/index.php 2 3<?php 4 5namespace MyApp\Controller; 6 7class Index extends \MyApp\Controller { 8 9 public function run() { 10 if (!$this->isLoggedIn()) { 11 // login 12 header('Location: ' . SITE_URL . '/login.php'); 13 exit; 14 } 15 } 16 17} 18

PHP

1//vagrant/sns_php/config/autoload.php 2 3<?php 4 5/* 6MyApp 7index.php controller 8MyApp\Controller\Index 9-> lib/Controller/Index.php 10*/ 11 12spl_autoload_register(function($class) { 13 $prefix = 'MyApp\'; 14 if (strpos($class, $prefix) === 0) { 15 $className = substr($class, strlen($prefix)); 16 $classFilePath = __DIR__ . '/../lib/' . str_replace('\', '/', $className) . '.php'; 17 if (file_exists($classFilePath)) { 18 require $classFilePath; 19 } 20 } 21});
$ php -S 192.168.33.10:8000 -t public_html/

試したこと

ドットインストールの通りに行っています。

補足情報(FW/ツールのバージョンなど)

CyberDock、Atomを利用

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

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

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

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

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

m.ts10806

2018/08/12 07:59

MyApp\Controller\Indexはクラスですかメソッドですか?ひとまずそちらも含めたコードを提示してください。
m.ts10806

2018/08/12 08:00

クラスであればネームスペースが正しく定義されていませんしメソッドであればインスタンス化するのはメソッドではなくクラスにしてください
hiyokorunner

2018/08/12 08:55

ご回答ありがとうございます。 //vagrant/sns_php/lib/Controller/index.php のソースコードが間違っていたようで、正しいものに修正させて頂きました。 MyApp\Controller\Indexはクラスなので、namespace MyApp\Controller; が間違っているという事でしょうか?
guest

回答1

0

ベストアンサー

「ドットインストール」の該当コンテンツが参照できないので、提示されているプログラムソースのみでの判断ですが、
vagrant/sns_php/public_html/index.phpにて、vagrant/sns_php/lib/Controller/index.phpが読み込めていないように思えます。

そのため、定義(クラス)が存在しない、というエラーが発生しているように思えます。
ドットインストールでは、定義(クラス)の読み込みをどのように行うよう説明がありますか?
目次を読む限り、autoloadの仕組みを利用するようです。
autoloadについては、一般的には以下のような仕組みです。
https://qiita.com/atwata/items/5ba72d3d881a81227c2a

autoload.phpの定義を読み込んでいない事が原因のようですね。
ドットインストールの過去部分を見直してみると良いと思います。

投稿2018/08/15 21:36

編集2018/08/16 04:25
takyafumin

総合スコア2335

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

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

hiyokorunner

2018/08/16 03:37

ご回答ありがとうございます。 仰る通り、クラスの読み込みはautoloadで読み込むようです。 config/autoload.phpを追加させて頂きましたので、宜しければご参照頂きたいです。
takyafumin

2018/08/23 09:47

「vagrant/sns_php/public_html/index.php」にて「config/autoload.php」を読み込む処理がないことを指摘させて頂きましたが、その後いかがでしょうか。 正しくは"ドットインストール"に手順があるかと思いますので、初回から再確認することをお勧め致します。
hiyokorunner

2018/08/23 11:35

返信が遅れまして申し訳ありません。 ドットインストールを復習し、解決致しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問