1

多くのサイト間で CakePhp2 コアを共有するために、webroot/index.php の CAKE_CORE_INCLUDE_PATH を編集して、cake ディレクトリを指すようにしました。それは機能し、ウェルカムページにアクセスできます。

しかし、Cake Console を実行しようとすると、CAKE_CORE_INCLUDE_PATH が定義されていない場合にのみ定義されていたため、ShellDispatcher.php が DS と CORE_PATH を定義していないという問題に遭遇しました。CAKE_CORE_INCLUDE_PATH が定義されていないかどうかをチェックする if ステートメントからそれらを定義したら、準備完了です。ただし、ケーキのコア ファイルをきれいに保ちたいので、このファイルを「ハッキング」したくありません。より良い、よりクリーンなオプションはありますか?

また、CAKE_CORE_INCLUDE_PATH を定義し、それを使用して、もちろんアプリの一部である Console/cake.php に $dispatcher を設定する必要がありました。

4

1 に答える 1

1

はい、あります。まず、アプリケーション全体の変数を .xml で定義しないでWebroot/index.phpください。実際のところ、このファイルにはまったく触れないでください。で変数を定義できます Config/bootstrap.php

シェルWebroot/index.phpでまったく起動していないため、エラーが発生していました-実際にはPHPのCLIを実行しており、CakePHPは別の方法で起動しています. bootstrap.phpもちろん、ファイルを通過します。

また、このファイルを使用してグローバル変数を定義する必要がありますが、PHP の $_SERVER 変数のWeb サーバー関連のメンバー (例: HTTP_HOST と定義: )を使用する場合、ここで少しボトルネックがあります$myHost = $_SERVER['HTTP_HOST'];。シェルを起動すると、Cake はこの変数を設定しようとし、エラーをスローして失敗します。これは、前に述べたように、CakeShell が呼び出されると PHP が CLI モードで実行されるためです。bootstrap.phpもちろん、これを検出する方法があります。CLI を使用しているかどうかを識別するために、 $_SERVER['SCRIPT_FILENAME'] または $_SERVER['SCRIPT_NAME']を使用できます。:)

于 2012-07-16T21:42:18.510 に答える