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

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

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

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

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

Q&A

解決済

1回答

454閲覧

PHP の Slim にて、独自クラスを利用できるようにしたい

sutonea

総合スコア207

PHP

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

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

0グッド

0クリップ

投稿2023/06/25 04:04

実現したいこと

  • PHP の Slim にて、独自クラスを利用できるようにしたい

前提

PHP の Slim を利用して、ブラウザに文字列を表示しようとしています。
独自クラスの利用を試みたときに、以下のエラーメッセージが発生しました。

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

thrown in /Users/sutonea/dev/php/hello_slim/public/index.php on line 18 [Sun Jun 25 12:51:34 2023] [::1]:51033 [200]: GET /sample - Uncaught Error: Class "MySpace\SampleClass" not found in /Users/sutonea/dev/php/hello_slim/public/index.php:18

該当のソースコード

public/index.php

php

1<?php 2use Psr\Http\Message\ResponseInterface as Response; 3use Psr\Http\Message\ServerRequestInterface as Request; 4use Slim\Factory\AppFactory; 5use MySpace\SampleClass as SampleClass; 6 7require __DIR__ . '/../vendor/autoload.php'; 8 9$app = AppFactory::create(); 10 11$app->get('/', function (Request $request, Response $response, $args) { 12 $response->getBody()->write("Hello world!"); 13 return $response; // こちらは正常に動作しています 14}); 15 16 17$app->get('/sample', function (Request $request, Response $response, $args) { 18 $klass = new SampleClass(); // ここで独自クラスを利用したいですが、エラーとなります 19 $response->getBody()->write($klass->execute()); 20 return $response; 21}); 22 23$app->run();

composer.json

json

1{ 2 "require": { 3 "slim/slim": "4.*", 4 "slim/psr7": "^1.6" 5 }, 6 "autoload": { 7 "psr-4": { 8 "MySpace\\": "src/" 9 } 10 } 11} 12

src/MySpace/SampleClass.php

php

1namespace MySpace; 2 3class SampleClass { 4 public function execute() { 5 return "Sample"; 6 } 7}

試したこと

  • composer dumpautoload の実行
  • サーバー再起動

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

OS : Mac OS 12.6.5
PHP 8.2.7
Slim: 4.11.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

この回答はGPT-4による自動生成回答です

composer dumpautoload を実行した後、public/index.phprequire 文の後に、require 文を追加して、独自クラスのファイルを読み込んでみてください。

public/index.php

php

1<?php 2use Psr\Http\Message\ResponseInterface as Response; 3use Psr\Http\Message\ServerRequestInterface as Request; 4use Slim\Factory\AppFactory; 5use MySpace\SampleClass as SampleClass; 6 7require __DIR__ . '/../vendor/autoload.php'; 8require __DIR__ . '/../src/MySpace/SampleClass.php'; // 追加 9 10$app = AppFactory::create(); 11 12$app->get('/', function (Request $request, Response $response, $args) { 13 $response->getBody()->write("Hello world!"); 14 return $response; // こちらは正常に動作しています 15}); 16 17 18$app->get('/sample', function (Request $request, Response $response, $args) { 19 $klass = new SampleClass(); // ここで独自クラスを利用したいですが、エラーとなります 20 $response->getBody()->write($klass->execute()); 21 return $response; 22}); 23 24$app->run();

これで、独自クラスが正常に読み込まれるはずです。

投稿2023/06/25 04:05

teratail-ai

Powered by GPT-4

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

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

sutonea

2023/06/25 04:09

アドバイスに従った上で、 独自クラスのコードを以下のように書き換えたところ、うまくいきました ```php <?php namespace MySpace; class SampleClass { public function execute() { return "Sample"; } } ?> ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問