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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Q&A

解決済

4回答

737閲覧

既存のPHPシステムからLaravelのコントローラを起動させたい

higa2090

総合スコア3

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

0グッド

1クリップ

投稿2023/01/18 07:46

前提

既存のシステムがあり、そこからエラー文章を引数にしてLaravel で組んだコントローラを起動させたいのですがなかなかうまくいきません。
Laravelの勉強の意味も含まれていますので、既存システムからエラー文章を送ればいいじゃんという答えはなしでお願いします。
エラー文章でControllerがないと言われているのですが、実際にはあるので、なぜこうなるのかが分からず困惑しております。
どうぞよろしくお願いいたします。

実現したいこと

既存システムのphp

php

1require_once (dirname(__DIR__,3).'\\test\\app\\Http\\Controllers\\GoogleChatController.php'); 2class test{ 3 public function main(){ 4 //テスト 5 try { 6  throw new Exception(’エラーテスト’); 7 } catch (Exception $e) { 8 $alert = new \App\Http\Controllers\GoogleChatController; 9 $alert->setError($e->message); 10 $alert->index(); 11 } 12} 13 14}

Laravelで組んだGoogleChat送信用システムのコントローラ(GoogleChatController.php)

php

1<?php 2 3namespace App\Http\Controllers; 4use App\Http\Controllers\Controller; 5use Illuminate\Http\Request; 6use App\Models\User; 7use App\Notifications\GoogleChat; 8// use Auth; 9// use Validator; 10class GoogleChatController extends Controller 11{ 12 private $err; 13 //受け取ったエラーをセット 14 public function setError(string $err) { 15 $this->err = $err; 16 } 17 //エラーをゲット 18 public function getError() :string { 19 return $this->err; 20 } 21 22 public function index() 23 { 24 $user = new User(); 25 $user->notify(new GoogleChat($this->err)); 26 } 27}

通知クラス

php

1<?php 2 3namespace App\Http\Controllers; 4use App\Http\Controllers\Controller; 5use Illuminate\Http\Request; 6use App\Models\User; 7use App\Notifications\GoogleChat; 8class GoogleChatController extends Controller 9{ 10 private $err; 11 //受け取ったエラーをセット 12 public function setError(string $err) { 13 $this->err = $err; 14 } 15 //エラーをゲット 16 public function getError() :string { 17 return $this->err; 18 } 19 20 public function index() 21 { 22 $user = new User(); 23 $user->notify(new GoogleChat($this->err)); 24 } 25} 26

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

PHP Fatal error: Uncaught Error: Class "App\Http\Controllers\Controller" not found in C:\test\app\Http\Controllers\GoogleChatController.php:11

試したこと

composer dump-autoloadcomposer installcomposer updateで試してから
既存のシステムを実行しましたが、やはり同じエラーでおわってしまいます。
Controller.phpもパスは間違っておらず、いじってません。

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Foundation\Auth\Access\AuthorizesRequests; 6use Illuminate\Foundation\Bus\DispatchesJobs; 7use Illuminate\Foundation\Validation\ValidatesRequests; 8use Illuminate\Routing\Controller as BaseController; 9 10class Controller extends BaseController 11{ 12 use AuthorizesRequests, DispatchesJobs, ValidatesRequests; 13}

autoload.phpはあります

php

1<?php 2 3// autoload.php @generated by Composer 4 5if (PHP_VERSION_ID < 50600) { 6 echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; 7 exit(1); 8} 9 10require_once __DIR__ . '/composer/autoload_real.php'; 11 12return ComposerAutoloaderInit3d3d0927cc782fb75628c8586ae5587b::getLoader();

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

php(8.1)
Laravel(9.47.0)

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

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

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

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

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

yuma.inaura

2023/01/18 15:26

フレームワーク外からフレームワークのコードを呼び出すのはなかなか無理がありそうな
m.ts10806

2023/01/18 20:46

用途不明ですがコントローラ直呼びではなく、ルーティングに設定したURLを叩くのではだめですか? APIとして利用するという意味です。
kawax

2023/01/18 22:44

やろうとしてることが何もかも全部間違ってる。XY問題。こういう初心者は何を説明しても一切聞く耳持たないのは分かってるので無駄なことはしない。
guest

回答4

0

自己解決

やっぱりLaravelだと難しそうだったので、時間がなかったため、
phpで

php

1function triggerSendError($Error){ 2 $Error = mb_convert_encoding($Error, 'UTF-8', 'ASCII, JIS, UTF-8, EUC-JP, SJIS'); 3 $data = json_encode([ 4 'text' => $Error 5 ], JSON_UNESCAPED_UNICODE); 6 $url = WEB_HOOK; 7 $curl = curl_init(); 8 curl_setopt($curl, CURLOPT_URL, $url); 9 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,false); 10 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 11 curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); 12 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 13 curl_setopt($curl, CURLOPT_HTTPHEADER, [ 14 'Content-Type: application/json', 15 ]); 16 $response = curl_exec($curl); 17 curl_close($curl); 18}

と、オードソックスにCurlを使う方法で解決しました。

※curl_setoptはoptionsを使う方法もあります。
※WEB_HOOKは定数です。関数の引数にエラー文章を入れます
Laravelは結局別システムから使うことはできないということで、
さらに勉強していきます。。。
皆様ありがとうございました。

投稿2023/01/26 08:45

higa2090

総合スコア3

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

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

0

ひとまず、進捗ですが、
皆さんお返事ありがとうございます。
結局autoload入れてもダメでした。。。

APIとしての使い方をもうしばらく考えてみますが、
APIとして使う場合、どうAPIを使えばいいのかなというのが
まだ調べていてもわからないので、できればそこの部分を
教授いただければと。。。

どうぞよろしくお願いいたします。

投稿2023/01/24 07:56

higa2090

総合スコア3

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

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

0

「既存システムのphp」 の方の1行目の require_once を変更し、composer の autoload.php ( vendor/autoload.php )を読み込むように変更すれば動作するのではないでしょうか。

vendor/autoload.php を読み込むだけで各クラスのオートロードはできるかと思います。

投稿2023/01/19 23:17

kaz.Suenaga

総合スコア2037

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

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

0

みなさんありがとうございます。
やはり難しそうですね。。。
とりあえずエラー文をもってきて、
URLをたたくってことにして、
curl関数を作ってたたいてみることにしました。

php

1function curl_send($err){ 2 3 try { 4 //初期化 5 $url = ''; 6 $curl = NULL; 7 $params = NULL; 8 9 //パラメータ設定 10 $url = 'http://xxx.x.x.x:9999/'; //LaravelのURLです 11 $params = [ 12 'err' => $err, 13 ]; 14 $headers = array( 15 "Content-Type: application/json", 16 ); 17 18 //curl実行 19 $curl = curl_init($url); 20 curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 21 curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); 22 curl_setopt($curl, CURLOPT_POST, TRUE); 23 curl_setopt($curl, CURLOPT_POSTFIELDS, $params); 24 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 25 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 26 curl_exec($curl); 27 curl_close($curl); 28 return true; 29 } catch (Exception $e) { 30 return false; 31 } 32}

上で作ったcurl_send()に$errを入れたんですが、GoogleChatControllerにエラーが出てこないのですよね。。。
LaravelをAPIとしての使うというのがぴんと来ないので、だれか享受してくださると幸いです!

投稿2023/01/19 07:23

編集2023/01/19 07:26
higa2090

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問