php - hiddeninput - yii2 español
¿Cómo administro los activos en Yii2? (4)
Al principio, debe crear la clase SomeAsset en su aplicación / asset / folder con sus nuevos archivos js y css. Puede extender su AppAsset sobrecargando sus propiedades.
Siguiente uso esto en SomeController
use Yii;
use app/assets/SomeAsset;
y en acción, algunos como este:
SomeAsset::register(Yii::$app->view);
Por ejemplo, creé una nueva página y me gustaría usar, por ejemplo, backbone.js, un archivo css personalizado y alguna colección de imágenes. ¿Dónde debería declarar todo esto en Yii2? Encontré el módulo AppAsset.php, pero esto es solo para archivos css / js y no he notado ningún cambio cuando mis archivos css / js y la ruta se declararon allí:
class AppAsset extends AssetBundle {
public $basePath = ''@webroot'';
public $baseUrl = ''@web'';
public $css = [
''css/site.css'',
''js/jquery.mobile-1.4.2.min.css'',
];
public $js = [
''js/jsquery-2.1.0.min.js'',
''js/jquery.mobile-1.4.2.min.js'',
''js/script.js'',
];
public $depends = [
''yii/web/YiiAsset'',
''yii/bootstrap/BootstrapAsset'',
];
}
¿Qué estoy haciendo mal?
Me tomó un tiempo averiguarlo, pero a continuación se muestra la parte relevante del código fuente de Yii2
if ($this->sourcePath !== null && !isset($this->basePath, $this->baseUrl)) {
list ($this->basePath, $this->baseUrl) = $am->publish($this->sourcePath, $this->publishOptions);
}
Entonces, Yii2 publicará los activos solo si se establece $sourcePath
, y $basePath
y $baseUrl
no están configurados (!). Este último me hizo tropezar, y parece que lo mismo va para ti.
Así que tengo este AppAsset, que publica debidamente.
use yii/web/AssetBundle;
class AppAsset extends AssetBundle
{
public $sourcePath = ''@app/assets/app'';
public $css = [
''css/openbook.css'',
''fontello/css/fontello.css'',
''fontello/css/animation.css''
];
public $js = [
''js/plug.openbook.js'',
''js/plug.interpret.js'',
''js/plug.drop.message.js''
];
public $depends = [
// ''yii/web/YiiAsset'',
// ''yii/bootstrap/BootstrapAsset'',
];
}
Por supuesto, tengo en el diseño principal
use frontend/assets/AppAsset;
...
AppAsset::register($this);
Por experiencia personal, los activos son una de las partes de Yii que me parecieron extremadamente frustrantes.
Es difícil descubrir de manera confiable dónde estará el archivo y el cambio de ida y vuelta con el modo de depuración activado y desactivado creará más frustración.
Sugiero eliminar el manejo de activos y simplemente guardar todos los archivos JS en una carpeta, luego se puede incluir así:
Yii::app()->clientScript->registerScriptFile(''/js/jquery.jeditable.mini.js'');
para utilizar este AppAsset o cualquier otro, debe registrarlo en la vista
use app/assets/AppAsset;
AppAsset::register($this);