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

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

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

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

Q&A

解決済

1回答

216閲覧

Laravel9でapi.phpを複数ファイルへ分けたい

landy77

総合スコア1614

Laravel

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

0グッド

0クリップ

投稿2023/05/15 23:24

編集2023/05/15 23:25

目的

routes/api.phpが肥大してきたので複数ファイルに分けたい

前提

Laralvel9.52.0
PHP8.1

viewはVue3を使用

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

ターミナルでphp artisan route:listを実行すると

Segmentation fault

が返ってきてしまう。

vueからaxiosで呼び出しているのですがapi2に記載した部分には実際もアクセスできないです。
php aritisan route:listに出ないので当然ではありますが実際は「AxiosError: Network Error」が出力されます。

該当のソースコード

route/api2.php

1<?php 2use Illuminate\Support\Facades\Route; 3$rootController = 'App\Http\Controllers\\'; 4 5Route::post("/test/test",$rootController."Test2Controller@test");

実際のURLは別ですが投稿用にtestにしています。

API部分のみ書き出します。

app/Providers/RouteServiceProvider.php

1Route::prefix('api') 2 ->middleware('api') 3 ->group(base_path('routes/api.php')); 4 5//追加したいAPIルートファイル 6Route::prefix('api') 7 ->middleware('api') 8 ->group(base_path('routes/api2.php'));

試したこと等

prifixがかぶるのが問題なのか?と思って6行目をapi2とか試してみたのですがダメでした。

6~8行目をコメントアウトするとphp artisan route:listも問題なく出力されるのでやはりこの部分だとは思いますが・・

必要事項・足らない情報等ございましたらご指摘頂けたらと思います。

よろしくお願いいたします。

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

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

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

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

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

AbeTakashi

2023/05/16 06:01

PHPでSegmentation faultの場合、PHPのソースコードに問題があるというよりはPHPの内部処理系のエラー(バグ)の可能性があると思います。わりと新しい記事ですが 参考) https://www.prime-strategy.co.jp/column/archives/column_5825 というのもあります。なので、ソースコードよりも根元の部分(PHPやPHPの設定そのもの)を調べた方が良いかもしれません。core dumpを吐かせるようにして調査する方法も有効かもしれませんし、解決できない場合はPHPを言ったん削除して、ちょっとだけ古めのPHPをインストールするのもありかもしれません。 参考) https://www.bit-hive.com/articles/20190206
landy77

2023/05/16 13:08

・WSL2のPHPを8.0.28へ変更 ・sailプロジェクト内のdocker-compose.ymlのsail部分のバージョンを8.0に変更 ・sail build --no-cache ・vendorフォルダごと削除 ・composer installでvendorを再作成 ・sail up -d でビルドしなおしてみましたが、全く変化無しでした。
guest

回答1

0

自己解決

自己解決しました

AbeTakashiさんの書き込み後にあれこれ試してみました。
api2.php自体を一旦無効にしてapi2.phpに記載していたルートを(テストだったので一つだけ存在)api.phpに移しても現象が解決しないことが判明

その為、もう少し調べた所、今回のシステムが「コントローラー」「サービスインターフェース」「サービス」「リポジトリインターフェース」「リポジトリ」のつながりになっています。
そのサービスの宣言部分でリポジトリインターフェースとリポジトリを宣言する部分(useの部分)がミスしていました。

その為、単純なコントローラーだけなら大丈夫だったのでしょうが、サービス・リポジトリ・各インターフェースが記述ミスでつながっていないため、ルートが解決出来なくてroute:list的にはエラーとしての取得以前にphpとしてSegmentation faultとしてエラーになった・・・?と推測しています。

正しくインターフェースを書き込めてからはphp artisan route:listで記述のミスを指摘するようになり、最終的に解決しました。

AbeTakashiさんのコメントで最終的には該当部分まで至りました。

自分のミスでしたが大変助かりました。

ありがとうございました。

投稿2023/05/16 13:52

landy77

総合スコア1614

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

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

AbeTakashi

2023/05/16 16:50 編集

何もお手伝いできてませんが解決して良かったです。でも不思議ですね、そんなんで(というとあれですが)セグフォでるってのは・・・ Docker環境だとまた別の要因でセグフォが出たりするらしいので、今後も要注意かもしれません。PHPの記述ミスレベルでセグフォでちゃうと開発しにくいと思いますので、Dockerの設定を一度見直すのもありかもしれません(もし今後に質問される際はDocker環境であることも書かれた方がいいかとは思います)。 参考) https://github.com/soedinglab/hh-suite/issues/104
landy77

2023/05/17 13:10

確かにWSL2でDockerなのを記載わすれしていました・・ Laravelをサービス・リポジトリを絡めてがっちり開発するのが初めてなのでそれぞれのuseやコンストラクタへの記載がまだミスが多くて、何がひっかかってるのかがまずわからなくて問題切り分けが難しかった状態です・・・ 次回以降はしっかり記載していきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問