フロン広兄弟姉妹のフォルダ
-
25-09-2019 - |
質問
私が見ることになるすべての種類のソリューションを延びるフロンガに親フォルダにアクセスの親会社のファイルをCF投与が、今ではもうほとんど見られないの派、フロンの"共有"/同フォルダへのアクセスの親フォルダの中に別のフォルダを作
このソリューション アクセスする必要があるときに親フォルダ?(だからマッピングは、アクセスできないでいます。フロンとにかく)
このソリューション 必要とされることができるようになる。フロンな作業において作成にmyAppは何も行いませんので環境も含まれのインデックスページにmyAppはからあり---顧客が直接電話で火を認識します。フロン)
たとえば、次のようになります。
- wwwroot/some/path/myApp/共用です。フロン
- wwwroot/some/path/myApp機能します。フロン
私を呼び出すことができるのは機能します。cfc(共通法のアプリケーションで使用する)の機能です。フロンスーパーおよびます。
していまへのアクセスのすべてのファイル内myAppな"wwwroot"、""、"パスです。"
するための延長です。フロン内での機能です。cfcしています拡大にフルパスでの"ある。ます。myApp.共用となります。ベース"ここが問題だと改称myAppフォルダにいい手を編集す。フロンを拡張する。フロン
私が求めていたものなのでアプリを作成する特定の"バリア"がアプリのフォルダ名を変更すがおかしくなることはありませんの量は爆発を必要とするかを編集すべてのフロンのファイルを使用する機能からです。フロン.
以降、利用できない相対パスを拠点"..共用となります。ベース")ってい使い方を創造するフロンのmyAppフォルダができますから、緩和の名を変更したい頭痛の場合で発生したり、方法で一般名のように"myApp"とから新たな方法論を提供することである。(myApp.共用となります。ベース)
私はアクセスできません。cfm、Coldfusion。
解決
個人的に私は簡単な方法行くだろう:関数にincapsulateベースを
あなたのように見えますが、いくつかの一般的な機能のためのコアコンポーネントのセットを使用します。これが本当であるならば - 。incapsulationさらに適用
オブジェクトへのパスを動的に構築することができ、例えば(読みやすくするためのステップバイステップのプロセス):
<cfscript>
path1 = GetDirectoryFromPath(cgi.SCRIPT_NAME);
path2 = ListToArray(path1, "/");
path3 = path2;
path3[ArrayLen(path3)] = "shared";
path4 = ArrayToList(path3, ".");
path5 = ArrayToList(path2, ".");
myBase = CreateObject("component", "#path4#.Base");
myFunction = CreateObject("component", "#path5#.Function").init(myBase);
</cfscript>
Function
で機能init
を作成します:
<cffunction name="init">
<cfargument name="base">
<cfset variables.Base = arguments.base />
<cfreturn this />
</cffunction>
もちろん、あなたが拡張するための強力な理由があるかもしれませんが、少なくとも、このアプローチは、親ディレクトリが名前の変更に敏感ではありません。
他のヒント
Base.cfcは別のCFCを拡張していない場合、あなたはあなたの機能フォルダ内の別のCFCファイルにBase.cfcファイルを含めることができるかもしれません。
は例えば、コンテンツと機能フォルダにあるCFCファイルを作成します
<cfinclude template="../shared/base.cfc" />
次に、共有フォルダ内の代わりに、CFCの新しいファイルを拡張します。
私はこれを行うには見ることができる最も簡単な方法は、拡張機能ディレクトリ内のベースディレクトリへのシンボリックリンクやジャンクションポイントを作成することです。
あなたのコードを移動する必要がある場合は、残念ながら、それは純粋なCFソリューションではありません、またポータブル。うまくいけば、誰かが良い答えを持っていますが、どれが提示されていない場合、これがフォールバックポイント可能性があります。
...
リセット/アプリの起動時にコードを生成たとえば、コンポーネントタグを直接実行すべきでないファイルにそうようなことができ...
<cfabort>
<cfcomponent extends="{sharedpath}.Base">
...
、関数内で、またはApplication.cfcのからと呼ばれるこのような何かを...
<cfdirectory name="codetemplates" action="list" directory="wwwroot/some/path/myApp/codetemplates" />
<cfloop query="codetemplates">
<cffile name="temp" action="read" path="#tempfilepath##filename#" />
<cfset newfilecontent = replace(temp.filecontent, '{sharedpath}', configvarwithrightpath) />
<cfset filecontent = replace(newfilecontent , '<cfabort>', '') />
<cffile name="temp" action="write" path="#livefilepath##filename#" />
</cfloop>
は、他のアプローチは、あなたが必要なコードを作成するために実行することをローカルでビルドプロセスを持つことであるが、上記の私の例では、設定変数を更新し、ライブ環境で必要に応じてCFCだ更新できるようになります。
なぜわざわざの共通コードを別のフォルダ?だけでと同じフォルダ"機能"をフロンそのすべての拡張されている内容が消えてしまうの相対パスです。
な:
- wwwroot/some/path/myApp/共用です。フロン
- wwwroot/some/path/myApp機能します。フロン
用途:
- wwwroot/some/path/myApp機能です。フロン
- wwwroot/some/path/myApp機能します。フロン
と:
<cfcomponent extends="Base"></cfcomponent>
しかし、い/必要に複数の"機能"によりレベルのフォルダ、そしていつも似ています。入 Proxy.cfc
内部の"機能"によりレベルのフォルダは、このコード:
<cfcomponent extends="some.path.myApp.shared.Base"></cfcomponent>
そして各フロンの"機能"によりレベルのフォルダーのおかげで、現地の Proxy.cfc
(extends="proxy"
).ここで1つのフォルダにプロキシは、現在も理想的なものではなく、手軽なのよ更新毎にフロン.