web-dev-qa-db-ja.com

コンポーネントのインストール時にsql / xmlのJFolder :: files "パスがフォルダではありません"のはなぜですか?

カスタムコンポーネントのインストール/アンインストール時に次のエラーが発生します。

JFolder::files: Path is not a folder. Path: /var/www/joomla/administrator/components/com_mycomponent/sql/xml

空のxmlフォルダを作成すると、エラーが発生しなくなります。私の構成xmlファイルまたはこのフォルダーを呼び出すことができる他の場所には何もありません。また、このエラーが発生する理由を見つけることができるドキュメントはどこにもありません。私は誰かがそれを引き起こしているものを指摘し、それを理解するためにコアコードを掘り下げる手間を省くことを望んでいます。

このフォルダの目的は何ですか?その中に仮定されているものはありますか?

EDIT:これは、コンポーネントの XML構成ファイル へのリンクと、コンポーネントの インストールスクリプトファイルへのリンクです。

1
calligraphic-io

あなたの問題は、FOFがデータベースとスキーマに追加のインストーラークラスを使用しているという事実に起因していると思います。

FOFには、FOF30\Database\Installerクラスが付属しています。 Joomla!とは異なり、そのアクションは信頼できないバージョン番号に基づいていません。代わりに、テーブル/フィールドが存在するかどうか、レポートされたフィールドのタイプ、またはカスタムSQL共有関数updateSchema()の結果に基づいてSQLコマンドを実行します

したがって、たとえばインストーラースクリプトに次の2つの関数を追加(呼び出し)することをお勧めします。

public function updateSchema()

そしてアンインストール時に:

public function removeSchema()

また、コンポーネントにスキーマXMLファイルを提供する必要があります。

スキーマファイルはXML形式で提供されます。データベーステクノロジごとに必要なXMLファイルは1つだけです。デフォルトでは、これらのファイルはコンポーネントのバックエンドのsql/xmlディレクトリに格納されています。これは、クラスコンストラクターに渡す$ directoryパラメーターを介してオーバーライドできるものです。

上記の理由と使用法の完全な説明は次のとおりです: https://github.com/akeeba/fof/wiki/The-XML-Database-Schema-Installer

上記の使用法は、FOFの作成者からのコンポーネントの1つで確認できます: https://github.com/akeeba/akeebasubs/tree/development/component/backend/sql

これがあなたにこの主題についていくらかの光を与えてくれることを願っています。

1
Zollie