Pawan Pawan - 2 months ago 19
Javascript Question

Yii2: Registering Asset Bundle vs registering external Js file

Hi I wanted to know the advantage of registering Asset Bundle following the process described in the docs like
Process one
in AppAsset.php

public $js = [

then in the view file
adding Namespace like

namespace app\assets;

and then adding the use statement like

use app\assets\AppAsset;

Instead of doing all this if I use
Process Two

$this->registerJs('js/myjsfile.js', $this::POS_READY);

it works fine.
So why should I use Process One.

  1. Any advantage and reason for this will be greatly appreciated.

  2. If I follow the process one Do I need to add all the js files in
    AppAsset.php individually.



One of the main reasons for using an Asset Bundle is that your assets' paths will always be correct. Consider:

$this->registerJsFile('js/myjsfile.js', ['position'=>$this::POS_READY]);

will generate something like:

<script src="js/myjsfile.js"></script>

Which works great for non urlManager enabled urls, e.g. http://localhost/yiiproject/index.php?r=user/update&id=8 because your browser looks for the js file at: /yiiproject/js/myjsfile.js

But if you enable urlManager, your url will look like http://localhost/yiiproject/user/update/8, which means your browser will look for your js file at: /yiiproject/user/update/8/js/myjsfile.js.

You could overcome this problem by using:

$this->registerJsFile(Yii::$app->request->baseUrl.'/js/myjsfile.js', ['position'=>$this::POS_READY]);

But the Asset Bundle basicly does that for you.