Symfony に更新しようとしている非常に古い php アプリケーションがあります。
アプリケーションは現在、次のような構造になっています。
/www <-current web root
php_page1.php
php_page2.php
php_pagen.php
/dashboard
dashboard_page1.php
dashboard_page2.php
dashboard_pagen.php
ページには、関数などでいっぱいのヘルパー ファイルがあり、アセットでいっぱいのフォルダーもいくつかありますが、それはあまり重要ではありません。したがって、特定のページにアクセスするには、ブラウザで domain.com/php_page1.php または domain.com/dashboard/dashboard_page1.php を指定します... フロント コントローラーはありません。すべてのページに直接アクセスします。
全体として、一度にリファクタリングするには多すぎるので、一度に 1 ページずつ分割して行いたいと考えています。
私がやりたいことは、symfony を現在持っているものの上にインストールすることです。これにより、symfony 構造は現在ここにあるものと共存します。
/www <-legacy
php_page1.php <-legacy
php_page2.php <-legacy
php_pagen.php <-legacy
/app <-symfony
/dashboard <-legacy
dashboard_page1.php <-legacy
dashboard_page2.php <-legacy
dashboard_pagen.php <-legacy
/src <-symfony
/web <-symfony (new web root)
.htaccess <-symfony (points to app.php)
app.php <-symfony (front controller)
Symfony を正常にインストールし、サンプルのレガシー ページを移行しました (Web ルートが移動したことに注意してください)。これはうまくいきます。
問題は、最終的に、レガシー ページが存在する場合はそれらを提供し、存在しない場合はフロント コントローラー (app.php) を通過するために Apache が必要なことです。
これが私が試したことです。
さまざまな .htaccess ルールを試して、Apache が /www および /www/dashboard のファイルを提供できるようにしました。これらは失敗し、Symfony は一致するルートがないことを教えてくれます。
Symfony も試しまし$this->redirect('..\www\php_page1.php');
た。これは失敗し、Symfony は「構成されたディレクトリの外でテンプレートを読み込もうとしたようです」と言ってきます。
最後に、ルートとして /dashboard を追加しようとしました:
/**
* @Route("/cvdashboard/{file}")
*/
public function cvdashboardAction($file) {
return $this->render("@dashboard/$file");
}
小枝のパスを追加しました:
twig:
...
paths:
'%%kernel.root_dir%/../dashboard':dashboard
これには 3 つの例外があります。
FileLoaderLoadException in FileLoader.php
118行目:
InvalidArgumentException in YamlFileLoader.php
371行目:
ParseException in Inline.php
108行目:
質問
だから私の質問は:現在存在するURLが呼び出された場合(つまり、domain.com/php_page1.php)、SymfonyまたはApacheを介して直接そのページを提供するようにSymfony / Apacheを構成するにはどうすればよいですか? Symfony のフロントコントローラーにリクエストを処理させますか?
編集
私が現在持っている .htaccess は次のとおりです。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . app_dev.php [L]
これは Symfony で機能し、ルートが定義されているものはすべてルーティングします。問題は、それが /www/web (新しい Web ルート) にあることです。これは、Symfony が Web ルートを配置したい場所です。Web ルートの外にある /www または /www/dashboard にはアクセスしません。
.htaccess を使用して、Apache に Web ルートから 1 レベル下のファイルを取得させるか、Symfony にそれらのページを一般的な php スクリプトとして提供させようとしています。