前提・実現したいこと
これまでローカル環境で開発していたCakePHP4によるシステムを、サーバーにアップロードしたいと考えています。
その際、ソースコードは全て非公開領域に入れ、webroot配下のみを公開領域に入れたいんですが、
普通にwebroot/index.phpの中のrequiredを非公開領域に向けさせただけではうまくいきませんでした。
CakePHPのドキュメントを読んで、src/config/app.phpの設定をいじれば良いのでは?というところまでは分かったのですが
色々と設定をいじってみても、うまく読み込みが行われません。
環境
- CakePHP4.2.8
- PHP7.4.13
- 利用サーバー:エックスサーバー
実現したいディレクトリ構成
[ドメイン名]
ー cake ←ここにwebroot以外を全て格納したい
ー public_html
ーー system
ーーー sys1 ←ここにwebroot配下のファイルを格納したい
ーーーー webroot ←ここにwebroot配下のファイルを格納したい
ーーーーー css
ーーーーー font
ーーーーー img
ーーーーー js
ーーーーー _.htaccess ←app.php内のfullBaseUrlを設定するために、一旦削除
ーーーーー favicon.ico
ーーーーー index.php
※ドメイン直下には、WordPressがインストール済
発生している問題・エラーメッセージ
Missing Controller Cake\Http\Exception\MissingControllerException SystemController could not be found.
該当のソースコード
PHP
1// src/config/app.php 2 'App' => [ 3 'namespace' => 'App', 4 'encoding' => env('APP_ENCODING', 'UTF-8'), 5 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'), 6 'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'Asia/Tokyo'), 7// 'base' => false, 8 'base' => '/home/[サーバーID]/[ドメイン名]/cake', 9 'dir' => 'src', 10 'webroot' => 'webroot', 11 'wwwRoot' => '/home/[サーバーID]/[ドメイン名]/public_html/system/sys1/', 12 'baseUrl' => env('SCRIPT_NAME'), 13 'fullBaseUrl' => '/home/[サーバーID]/[ドメイン名]/cake', 14 'imageBaseUrl' => 'img/', 15 'cssBaseUrl' => 'css/', 16 'jsBaseUrl' => 'js/', 17 'paths' => [ 18 'plugins' => [ROOT . DS . 'plugins' . DS], 19 'templates' => [ROOT . DS . 'templates' . DS], 20 'locales' => [RESOURCES . 'locales' . DS], 21 ], 22 ],
PHP
1// src/bin/cake.php 2// Check platform requirements 3require dirname(__DIR__) . '/config/requirements.php'; 4require dirname(__DIR__) . '/vendor/autoload.php'; 5 6use App\Application; 7use Cake\Console\CommandRunner; 8 9// Build the runner with an application and root executable name. 10//$runner = new CommandRunner(new Application(dirname(__DIR__) . '/config'), 'cake'); 11$runner = new CommandRunner(new Application('/home/[サーバーID]/[ドメイン名]/cake/config'), 'cake'); 12exit($runner->run($argv)); 13
試したこと
- baseを、ソースコードのあるフルパスまでに変更
- baseUrlのコメントアウトを外し、webroot直下の.htaccessを削除(リネーム)
- wwwRootをwebrootまでのフルパスに変更
- fullBaseUrlをソースコードのあるフルパスまでに変更
3日ほどこの問題で右往左往しており、全く作業が進まずかなり困っています。
何かヒントのようなものでも良いので、ご教授いただけるとありがたいです。
よろしくお願いします。
追記
ご指摘いただきありがとうございます、不足情報について追加させていただきます。
ローカル環境時のディレクトリ構成
localhost/cakephp/配下
ー bin
ー config
ー logs
ー plugins
ー resources
ー src
ー templates
ー tests
ー tmp
ー vendor
ー webroot ←webroot配下のファイルのみを公開領域に出したい
ーー css
ーー font
ーー img
ーー js
ーー .htaccess
ーー favicon.ico
ーー index.php
ローカル環境では、CakePHP4をインストールした直後とディレクトリ構成は変わっておりません。
ローカル環境でのアクセスも、http://localhost/cakephp/でアクセスできておりました。
ローカル環境時のapp.php設定内容
PHP
1// src/config/app.php 2 'App' => [ 3 'namespace' => 'App', 4 'encoding' => env('APP_ENCODING', 'UTF-8'), 5 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'), 6 'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'Asia/Tokyo'), 7 'base' => false, 8 'dir' => 'src', 9 'webroot' => 'webroot', 10 'wwwRoot' => WWW_ROOT, 11 //'baseUrl' => env('SCRIPT_NAME'), 12 'fullBaseUrl' => false, 13 'imageBaseUrl' => 'img/', 14 'cssBaseUrl' => 'css/', 15 'jsBaseUrl' => 'js/', 16 'paths' => [ 17 'plugins' => [ROOT . DS . 'plugins' . DS], 18 'templates' => [ROOT . DS . 'templates' . DS], 19 'locales' => [RESOURCES . 'locales' . DS], 20 ], 21 ],
routes.php設定内容
PHP
1// src/config/routes.php 2<?php 3use Cake\Routing\Route\DashedRoute; 4use Cake\Routing\RouteBuilder; 5use Cake\Http\Middleware\BodyParserMiddleware; 6 7$routes->setRouteClass(DashedRoute::class); 8 9$routes->scope('/', function (RouteBuilder $builder) { 10 $builder->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); 11 12 $builder->connect('/pages/*', 'Pages::display'); 13 14 // API機能提供用 15 $builder->setExtensions(['json']); 16 $builder->resources('Api'); 17 18 19 $builder->fallbacks(); 20});
routes.phpに関しては、現時点でローカル環境、本番環境共に違いはありません。
回答1件
あなたの回答
tips
プレビュー