我是Yii2新手,我需要修改Yii2中kartiks FileInput小部件的registerassebundle()函数。我意识到这是在供应商文件夹中,所以我想做一个覆盖。仅供参考,这是使用高级模板。有人能告诉我为什么我不能超越或者我做错了什么吗?是的,我只是没有拿起这个文件/没有阻塞/没有错误/什么都没有,只是继续它的快乐方式,并将我的页面呈现为正常。
在common\components中,我有一个名为FileInputVeride的文件。php:
namespace common\components;
use Yii;
use \kartik\file\FileInput;
class FileInputOveride extends \kartik\file\FileInput
{
//...override function, ...do stuff...
编辑-这里还有一些代码:
这是表格顶部的声明。使用fileInput的php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\Url;
use yii\bootstrap\Modal;
use kartik\widgets\FileInput; <-- if I take this out, it errors that it cant find ::FileInput
use common\components\FileInputOveride; <--this has no effect
这一行下面是一些视图html,直到我们进入fileInput字段,该字段如下所示:
<?=
//fileinput widget for single file upload
$form->field($model, 'cover_file')->widget(FileInput::classname(),
[
'options'=>
[
'accept'=>'image/*',
'multiple' => false,
'id'=>'cover_file',
],
'pluginOptions' =>
[
'uploadUrl' => $upload_url,
'maxFileCount' => 1,
'allowedFileExtensions' => ['jpg', 'png','jpeg'],
'initialPreviewShowUpload' => false,
'uploadAsync'=> false,
'autoReplace'=>true,
],
'pluginEvents' =>
[
'fileuploaded'=>"function(event, data, previewId, index){
$.get( './call-image?id=".$model->id."', function( response ) {
$('#thumb-container-image').html(response);
});
}",
],
])->label(false);
?>
正在尝试重写此kartik FileInput中的registerAssetBundle()函数。php和我自己的FileInputVeride。php:
namespace kartik\file;
use Yii;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use kartik\base\InputWidget;
use kartik\base\TranslationTrait;
/**
* Wrapper for the Bootstrap FileInput JQuery Plugin by Krajee. The FileInput widget is styled for Bootstrap 3.x with
* ability to multiple file selection and preview, format button styles and inputs. Runs on all modern browsers
* supporting HTML5 File Inputs and File Processing API. For browser versions IE9 and below, this widget will
* gracefully degrade to normal HTML file input.
*
* @see http://plugins.krajee.com/bootstrap-fileinput
* @see https://github.com/kartik-v/bootstrap-fileinput
*
* @author Kartik Visweswaran <kartikv2@gmail.com>
* @since 2.0
* @see http://twitter.github.com/typeahead.js/examples
*/
class FileInput extends InputWidget
{
这里是整个FileInputOveride.php文件:
namespace common\components;
use Yii;
class FileInputOveride extends \kartik\file\FileInput
{
/**
* Registers the asset bundle and locale
*/
public function registerAssetBundle()
{
$view = $this->getView();
if ($this->resizeImages) {
PiExifAsset::register($view);
$this->pluginOptions['resizeImage'] = true;
}
$theme = ArrayHelper::getValue($this->pluginOptions, 'theme');
if (!empty($theme) && in_array($theme, self::$_themes)) {
FileInputThemeAsset::register($view)->addTheme($theme);
}
if ($this->sortThumbs) {
SortableAsset::register($view);
}
if ($this->purifyHtml) {
DomPurifyAsset::register($view);
$this->pluginOptions['purifyHtml'] = true;
}
//above is the existing code
//below is the additional code i added to this function
$assetsRegistered = FileInputAsset::register($view)->addLanguage($this->language, '', 'js/locales');
//array of pages/paths we dont want to include the asset on
$pageArray = ['releases/update'];
//array of assets we dont want to use for the above pages
$fileArray = ['js/fileinput.js'];
//for each page, see if the file(s) specified is/are included, if so, unset them in the assets array
foreach($pageArray as $path)
if(in_array($path, $pageArray)){
foreach($fileArray as $file){
if(in_array($file,$assetsRegistered->js)){
$key= array_search($file, $assetsRegistered->js);
unset($assetsRegistered->js[$key]);
}
}
}
}
}
另外,我还可以使用该语法从其操作中列出属于操作/视图的资产。
因此:
public function actionUpdate(){
//show me all the js registered to this page
谢谢大家!
以你的形式。php文件使用“FileInputUtoveride::classname()”而不是“FileInput::classname()”——然后可以删除kartik输入的使用行。当你扩展任何插件时,你必须调用你的插件类名,而不是你扩展的插件。
我想安装一些yii2扩展,并想在yii2框架中使用它们。使用Composer时,我遇到了一个错误。 此外,我还尝试在composer中手动添加扩展并添加其内容。json仍然不起作用。 一些命令包括composer。phar文件名,我的主项目存储库中没有此文件。我尝试手动添加作曲家。phar正在使用composer命令,但仍然没有运行。 当我运行这个命令时,我得到了一个错误。 我犯了这个错误 我犯了
jQuery UI 的部件库(Widget Factory)使得创建小部件变得更加容易,这些小部件扩展了已有小部件的功能。这样子您就能在已有的基础上创建出功能强大的小部件,也可以在已有的小部件功能上做细微的调整。 注意:在学习本章节之前,需要明白什么是部件库(Widget Factory),及它是怎么工作的。如果您对这些知识还不熟悉,那么请先查看如何使用部件库(Widget Factory)章节。
我尝试设置的ID为Kartik文件输入小部件,但它似乎不会设置它...因为我无法捕获成功上传后的文件加载事件。 view.php catchevent.js
我对颤动和飞镖不熟悉,而且和继承有点关系。在创建了一些表单之后,事情变得多余,因为我们在所有文本字段上使用轮廓边框,如下所示: 我想创建的是一个OutlinedTextFormField,我可以简单地用作: 我想要的是一个元素在textformfieldlabeltext和hintText中拥有所有可用的构造函数。在构造器中或其他地方,我会根据我们的内部标准构建输入装饰等。
问题内容: 我正在尝试扩展Python,以用于越野比赛的结果。我想从格式为string的对象构造一个对象。我可以使用工厂设计模式和注释来完成此操作。我将如何通过覆盖和/或完成相同的任务? 使用下面的代码,构造一个对象会引发TypeError。请注意,未调用,因为未打印。 这是错误: 如果将代码从移至,则会得到以下结果。注意这次,输出显示我的函数被调用了。 问题答案: 显然,对象是不可变的,这意味着
问题内容: 我想更改类的方法的执行方式,而不覆盖该方法,而仅覆盖(或理想地扩展)内部类。假设我无法更改需要执行此操作的事实(我正在修改现有的开放源代码库,因此拔出类或其他方法会遇到麻烦)。 我的目标是通过仅更改Thing,使B的toString()返回“ 30”,当前在该位置将返回“ 20”。理想的情况是仅更改方法value2(从而使任何其他方法保持不变),但是我不知道这是否可行。 谢谢 问题答案