今天切换分支后,发现很多远程已经删除的分支在本地依然可以看到。
使用命令 git remote show origin
,可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息。
分支状态 (use 'git remote prune' to remove)
此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用
git remote prune origin
命令来同步删除了那些远程不存在的分支。
今天切换分支后,发现很多远程已经删除的分支在本地依然可以看到。
使用命令 git remote show origin
,可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息。
分支状态 (use 'git remote prune' to remove)
此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用
git remote prune origin
命令来同步删除了那些远程不存在的分支。
今天为了熟悉yii2队列模块如何,查了下官方有,首先要安装扩展插件,在项目目录命令行模式下执行以下代码:
php composer.phar require --prefer-dist yiisoft/yii2-queue
或者添加以下内容
"yiisoft/yii2-queue": "~2.0"
到composer.json文件里面,然后执行composer update。
添加配置在common\config公共目录下的main.php或main-local.php选择一个加入以下内容。其中队列保存信息可以选择file,redis,db等各种数据存储方式,这里首先选择文件方式,其它根据自己需求选择测试。
<?php return [ 'components' => [ 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '192.168.0.100', 'port' => 6379, 'database' => 0, ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'queue' => [//队列文件方式 'class' => \yii\queue\file\Queue::class, 'as log' => \yii\queue\LogBehavior::class,//错误日志 默认为 console/runtime/logs/app.log 'path' => '@console/runtime/queue',//这样控制台才能操作到 //'path' => '@runtime/queue', ], /*'queue' => [//队列redis 'class' => \yii\queue\redis\Queue::class, 'redis' => 'redis', // 连接组件或它的配置 'channel' => 'queue', // Queue channel key ],*/ ], 'bootstrap' => [ 'queue', // 把这个组件注册到控制台 ], ];
接着就要创建相关文件了
首先在common\components公共目录下创建Job.php文件,内容如下,队列执行的任务类,让这个类实现 \yii\queue\JobInterface 接口就可以了。
<?php /** * Created by PhpStorm. * User: ken * Date: 2018/7/12 * Time: 16:19 */ namespace common\components; use yii\base\BaseObject; class Job extends BaseObject implements \yii\queue\JobInterface { public $url; public $file; public function execute($queue) { file_put_contents($this->file, file_get_contents($this->url)); } }
然后就在项目任意控制器下,添加以下内容来添加队列的内容:测试环境是windows
use common\components\Job; public function actionJob(){ //添加任务到队列 Yii::$app->queue->push(new Job([ 'url' => '//www.netpc.com.cn/wp-content/uploads/2018/06/12080502tmd.jpg', 'file' => 'c:\1.jpg', ])); // 将作业推送到队列并获得其ID $id=Yii::$app->queue->delay(1 * 30)->push(new Job([ 'url' => '//www.netpc.com.cn/wp-content/uploads/2018/06/12080502tmd.jpg', 'file' => 'c:\2.jpg', ])); // 这个作业等待执行。 //Yii::$app->queue->isWaiting($id); // Worker 从队列获取作业,并执行它。 //Yii::$app->queue->isReserved($id); // Worker 作业执行完成。 //Yii::$app->queue->isDone($id); }
执行后会在@console/runtime/queue目录下生产index.data和jobXXX.data一堆任务文件,XXX是任务编号。
添加完队列后就要来执行它了,命令行下控制台执行队列worker,windows下是运行cmd,对应项目目录下,执行以下命令。当执行成功一个任务后会删除对应文件同时更新index.data文件。
yii queue/clear//清空初始化
yii queue/run// 执行
yii queue/listen //监听队列
yii queue/info来//队列状态
其它内容可以参考官方网址:
https://github.com/yiisoft/yii2-queue/blob/master/docs/guide-zh-CN/README.md
有时候php需要在命令行下来完成一些操作,这时候就需要命令行控制台来协助你完成了。在项目目录上创建console\controllers\indexController.php文件,复制以下代码直接运行就能看到效果了。
<?php /** * Created by PhpStorm. * User: ken * Date: 2018/7/17 * Time: 20:08 */ namespace console\controllers; use yii\helpers\Console; use yii\console\Controller; class IndexController extends Controller{ public function actionIndex(){ //进度条效果 Console::startProgress(0, 100); for ($n = 1; $n <= 100; $n++){ usleep(100); Console::updateProgress($n, 100); } Console::endProgress(); //字体颜色 只是在linux下有效果 windows出现一堆x $hello = Console::ansiFormat("Hello",[Console::FG_YELLOW,Console::BG_BLUE]);//字体和背景颜色 $world = Console::ansiFormat("World",[Console::FG_GREEN]); Console::output("{$hello} {$world}"); Console::output(Console::ansiFormat("normal",[Console::NORMAL]));//正常 Console::output(Console::ansiFormat("bold",[Console::BOLD]));//粗体 Console::output(Console::ansiFormat("italic",[Console::ITALIC]));//斜体 Console::output(Console::ansiFormat("underline",[Console::UNDERLINE]));//下划线 Console::output(Console::ansiFormat("negative",[Console::NEGATIVE])); //用户输入 $name = Console::input("请输入你的名字:"); $formatName = Console::ansiFormat($name,[Console::FG_YELLOW]); Console::output("你的名字是:{$formatName}"); //选择单选题 $sex = Console::select("性别:",[1=>'男',2=>'女']); $formatSex = Console::ansiFormat($sex,[Console::FG_YELLOW]); Console::output("你的性别是:{$formatSex}"); //对或错 if (Console::confirm("Are you sure?")){ Console::output("user input yes"); }else{ Console::output("user input no"); } //必填 强行验证 Console::prompt("你的名字",['required'=>true,'error'=>'必须输入']); /* 关于prompt方法主要是第二个参数进行限制,这是一个数组类型的参数,里面的值为 required 真假,是否必须填写 default 默认值 pattern 正则匹配 validator 自定义验证函数 error 错误信息*/ } }
如果使用php系统自带的array_unshift() 函数将传入的单元插入到 array
数组的开头。刚好的我下表是数字,不符合需求。该函数注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。
发现官方文档下面有另外一种方法,直接使用加法还简单,按数组相加循序计算。
$someArray=array(224=>'someword1', 228=>'someword2', 102=>'someword3', 544=>'someword3',95=>'someword4'); $someArray=array(100=>'Test Element 1 ',255=>'Test Element 2')+$someArray; ?>
运行结果
array( 100=>'Test Element 1 ', 255=>'Test Element 2' 224=>'someword1', 228=>'someword2', 102=>'someword3', 544=>'someword3', 95=>'someword4' );
注意相同key是会被覆盖的。
php语法:
$c=$a??$b;等同于 $c=isset($a)?$a:$b;
$c=$a?:$b;等同于 $c=$a?$a:$b;
最近使用kartik-v/yii2-widget-fileinput结合yii2做项目来实现单图、多图上传图片,异步同步删除图片还是不错的,带预览功能。找了半天网上都没有,应该很少人用吧,最后发现官网有文档。下面红色部分代码处理:
<?php $form = ActiveForm::begin(["options" => ["enctype" => "multipart/form-data"]]); ?>
<?php
echo $form->field($comment_image_model, 'image[]')->label('点评图')->widget(FileInput::classname(), [
'options' => ['multiple' => true],
'pluginOptions' => [
// 需要预览的文件格式
'previewFileType' => 'image',
// 预览的文件
'initialPreview' => $p1,
// 需要展示的图片设置,比如图片的宽度等
'initialPreviewConfig' => $p2,
// 是否展示预览图
'initialPreviewAsData' => true,
//是否重写初始化的图片
'overwriteInitial'=>false,
// 异步上传的接口地址设置
'uploadUrl' => Url::toRoute(['image-upload']),
// 异步上传需要携带的其他参数,比如商品id等
'uploadExtraData' => [
'goods_id' => $id,
],
'uploadAsync' => true,
// 最少上传的文件个数限制
'minFileCount' => 1,
// 最多上传的文件个数限制
'maxFileCount' => 10,
// 是否显示移除按钮,指input上面的移除按钮,非具体图片上的移除按钮
'showRemove' => false,
// 是否显示上传按钮,指input上面的上传按钮,非具体图片上的上传按钮
'showUpload' => true,
//是否显示[选择]按钮,指input上面的[选择]按钮,非具体图片上的上传按钮
'showBrowse' => true,
// 展示图片区域是否可点击选择多文件
'browseOnZoneClick' => true,
// 如果要设置具体图片上的移除、上传和展示按钮,需要设置该选项
'fileActionSettings' => [
// 设置具体图片的查看属性为false,默认为true
'showZoom' => true,
// 设置具体图片的上传属性为true,默认为true
'showUpload' => true,
// 设置具体图片的移除属性为true,默认为true
'showRemove' => true,
],
],
// 一些事件行为
'pluginEvents' => [
// 上传成功后的回调方法,需要的可查看data后再做具体操作,一般不需要设置
"fileuploaded" => "function (event, data, id, index) {
console.log(data);
}",
"filebeforedelete" => "function (event, data, id, index) {//找了半天 官网有文档 应该很少人用
var aborted = !window.confirm('你确定要删除该图片吗?');
if (aborted) {
//window.alert('File deletion was aborted! ');
};
return aborted;
}",
],
]);
?>
附带官网地址
事件说明
http://plugins.krajee.com/file-input/plugin-events#filebeforedelete
事件演示
http://plugins.krajee.com/file-plugin-methods-demo#delete-validation-1
http://plugins.krajee.com/file-plugin-methods-demo#delete-validation-2
有问题留言。
今天使用使用ActiveForm小部件dropDownList表单。以为在后面的选项加入id选择值
<?= $form->field($model, 'member_id')->dropDownList($member, [ '1' => ['selected' => 'selected'] ]) ?>
这样就可以了,其实不对,它是根据$model模型对应的字段内容来自动选择的。$model->member_id如果有id,它就会selected上了,不需要你额外赋值。
也可以一开始就选择默认值,但是不是以上参数,要用value
<?= $form->field($model, 'member_id')->dropDownList($member, ['prompt'=>'选择会员','value' => 3]) ?>
这样就可以了,如果直接用html的dropDownList也可以
<?= Html::dropDownList( 'member_id',null,$member, [ 'options' => ['5' => ['selected' => true]], 'prompt' =>['text'=>'顶级栏目', 'options'=>['value'=>0]], 'style'=>'width:200px', ] ) ?>
不知道为什么pull后,团队修改过的代码文件会和本地没有修改过的文件产生冲突,放弃本地修改。
首先删除文件或修改名称后尝试从远程拉一个下来:
git checkout — 文件路径
最后实在不行就备份好文件后整个版本恢复,切记要先备份,防止你忘记了什么文件后悔莫已。
git reset –hard origin/dev //下载某个分支
git reset –hard origin/master //把HEAD指向最新下载的主版本
首先到https://tortoisegit.org/download/下载TortoiseGit-LanguagePack-2.6.0.0-64bit-zh_CN.msi最新windows版本,点击msi开始安装,一开始都是默认,下一步。
如果里需要配置github公钥密钥的话,可以在这里设置选择ssh方式,如果单纯使用TortoiseGit自身的方式,就选择TortoiseGitPlink方式,点击右边putty配置生成ppk密钥。
进入putty key界面后,下面选择ecdsa类型,点击Generate。
生成密钥
成功后复制key和相关信息。
点击save private key保存ppk 点击是,选择路径保存即可。最后关闭putty,返回刚才界面点击完成即可。
因为工作需要在windows7下使用git分布式版本控制系统,需要同时可以在git命令行模式或TortoiseGit拉取代码而不需要每次输入密码。
这时候需要同时安装git和TortoiseGit。
先到https://git-scm.com/download/win和https://tortoisegit.org/download/分别下载最新的git和TortoiseGit。
git使用命令ssh-keygen -C “邮箱地址” -t rsa产生的密钥在TortoiseGit中不能用。TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥。
使用git通常都是在服务端添加上你本地生成的无设置密码的密钥即可,密钥一般在安装git后生成在C:\Users\Administrator\.ssh目录下*.pub,如果没有可使用ssh-keygen命令生成。
git clone命令成功可控代码库后,关键一步道了这里只是需要把TortoiseGit设置网络里面的ssh客户端位置C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe,修改成成git安装目录下的ssh.exe即可。如果你安装过程已经选择了使用OpenSSH方式我想这里也应该不用修改了。不然拉取等操作的时候都会提示需要输入密码。