_/views/A/
_フォルダーにA.phpビューファイルがあります。 _/views/A/
_フォルダーにA.js jsファイルがあります。jsファイルをビューファイルに登録してください。
私が理解しているように、ビューファイルに$this->registerJsFile('path/to/file.js');
を書かなければなりません。
しかし(質問A)PHPStormから_method registerJsFile is not found in a class
_メッセージを受け取ります。
また、(質問B)両方のファイルが同じフォルダー_/views/A/
_にあることを考慮して、パスに何を書き込む必要がありますか?
アセットバンドルを作成するのではなく、手動でファイルを含める特定の理由はありますか?
いずれにせよ 資産に関するドキュメント を読んだ場合、sourceについて明確な区別があることに気付くでしょう。 publishedおよびexternalアセット。
その最も重要な部分は、sourceおよびpublishedアセットが異なるオプションを使用して、ファイルを公開するかどうかと公開する方法を決定することです。
あなたのケースでは、sourceアセットがあり、これをアセットディレクトリにコピーする必要があります。
registerJsFile
を ドキュメントにヒント として呼び出すと、publishedアセットが期待されます。
ここには特に2つのオプションがありますが、おそらく最初のオプションはより迅速で一貫性があります。
web/
_などのように_web/js/
_フォルダー内のアセットを移動し、registerJsFile()
を使用し続けますこれで問題が解決することを願っています。
これはエレガントではありませんが、jqueryの後にjsファイルを登録する必要がある場合は機能します(Yii2のドキュメントを参照)
<?php $this->registerJsFile(Yii::$app->request->baseUrl.'/js/youFile.js',['depends' => [\yii\web\JqueryAsset::className()]]); ?>
次の方法でjsファイルを登録する場合:
$this->registerJsFile("@web/js/all.js");
これは機能しますが、jQueryを使用することはできません。このファイルall.js
はjQueryの前にロードされるためです。 jQueryの後に読み込むには、'yii\web\YiiAsset'
または\yii\web\JqueryAsset
に依存させます。したがって、jQuery.js
の後にロードされます。例:
$this->registerJsFile("@web/js/all.js",[
'depends' => [
\yii\web\JqueryAsset::className()
]
]);
\yii\web\JqueryAsset
と\yii\web\YiiAsset
の違いは何ですか?
jQueryAsset
では、jQuery.js
の後にjsファイルがロードされ、YiiAsset
では、yii.js
ファイルの後にjsファイルがロードされます。
独自のカスタムアセットバンドルを作成する場合:
<?php
namespace frontend\components;
use yii;
use yii\web\AssetBundle;
class CustomAssets extends AssetBundle
{
public $css = [
"path/to/css/file.css"
];
public $js = [
"path/to/js/file.js"
];
public $depends = [
];
}
指定された場所にjsファイルを登録します
$this->registerJsFile('path/to/file.js', ['position' => \yii\web\View::POS_END]);
最初の引数は、ページに挿入する実際のJSコードです。 2番目の引数は、スクリプトをページのどこに挿入するかを決定します。可能な値は次のとおりです。
ヘッドセクションのView :: POS_HEAD。
View :: POS_BEGINを開いた直後。
を閉じる直前のView :: POS_END.
ドキュメント準備イベントでコードを実行するためのView :: POS_READY。
これにより、jQueryが自動的に登録されます。ドキュメントロードイベントでコードを実行するためのView :: POS_LOAD。これにより、jQueryが自動的に登録されます。最後の引数は、コードブロックを識別し、新しいIDを追加する代わりに同じIDで既存のものを置き換えるために使用される一意のスクリプトIDです。指定しない場合、JSコード自体がIDとして使用されます。
外部スクリプトは次のように追加できます。
$this->registerJsFile('http://example.com/js/main.js', ['depends' => [\yii\web\JqueryAsset::className()]]);
RegisterJsFile()の引数は、registerCssFile()の引数に似ています。上記の例では、main.jsファイルをJqueryAssetに依存して登録します。これは、main.jsファイルがjquery.jsの後に追加されることを意味します。この依存関係の指定がないと、main.jsとjquery.jsの相対的な順序は未定義になります。
A:ドキュメントから: http://www.yiiframework.com/doc-2.0/yii-web-view.html コードは正しいようです。
ビューファイル自体からjsを登録しますか?コントローラーではない? registerJsFile()メソッドは、ビュークラスからのものです。
あなたのIDEがメソッドを見つけられない可能性が高い、Apache環境で試してみましたか?
B:エイリアスを使用する