Laravel-admin 页面消息的使用

Laravel-admin 页面消息的使用

在Laravel-Admin下,返回提示有两种办法,一个是Alerts,另一个是toastr

Alerts


use Illuminate\Support\MessageBag;

$success = new MessageBag([
                'title'   => '恭喜',
                'message' => $_FILES['upfile']['name'].'导入成功',
            ]);

return back()->with(compact('success'));

toastr


use Illuminate\Support\MessageBag;

$success_toastr = admin_toastr('订单:'.$bid.' 已登记', 'success', ['timeOut' => 15000]);

return back()->with(compact('success_toastr'));
use Illuminate\Support\MessageBag;

$error_toastr = admin_toastr('订单登记失败!请检查您的填写内容', 'error', ['timeOut' => 20000]);

return back()->withInput()->with(compact('error_toastr'));
Laravel 服务器迁移

Laravel 服务器迁移

最近把服务器从国外迁回国内了,记录一下过程

  • 安装宝塔面板(安装apache、php7.2、mysql5.7)
  • git clone项目到服务器
  • 安装composer
  • 执行数据库迁移命令:php artisan migrate
  • 执行laravel的安装:composer install(composer自带有json包列表,执行自动安装即可成功安装laravel和其他组件,包括了laravel-admin面板)

其实迁移过程实在很简单,几条命令搞定了~主要还是一些自行安装的插件升级和安装比较费力气。

upupw搭建Laravel开发环境碰到的启动问题

一开始把目录设置为public不能运行,提示不能加载文件,估计是目录的原因,然后在apache的vhost文件里面把 open_basedir的目录改成根目录即可,不能使用public来访问

Laravel-Admin 上传excel文件并写入Mysql数据库

Laravel-Admin 上传excel文件并写入Mysql数据库

//添加双路由,根据请求不同,访问的操作也不同,get为上传页面,post为提交文件
routes.php

$router->get('你的路由名/upload', '你的控制器@upload');
$router->post('你的路由名/upload', '你的控制器@upload');
//上传方法
xxController.php

/**
* 上传文件
*/
public function upload(Request $request)
{
//获得请求的方法
$method = $request->method();

//post请求则解析文件
if ($method == 'POST'){

//按时间命名文件
$name = time().'.xls';

//文件保存到storage/app/public
$path = $request->file('upfile')->storeAs('public',$name);

//获取文件url
$url = storage_path().'/app/'.$path;

//读取文件
$file = \PHPExcel_IOFactory::load($url);

//文件转数组
$re = $file->getSheet(0)->toArray(null,false,false,true);

//初始化下标0到数组(excel没有下标为0的数组,从1开始),避免后面读取报错
$re[0] = '';

//写入字段
$header = [balabala];

//获取文件数组条目数
$recounts = count($re);

//开始循环写入数据库,为什么$i=2?,因为第一行为标头
for ($i=2;$i<$recounts;$i++){

//重置数组
$e = NUll;
$insert[] = [];
$arr[] = [];
$f = 0;

//循环写入数组
foreach($re[$i] as $r){

//最大数组数为字段数
if ($f < count($header)){

//你的代码。。。balabala

//组装数据
$arr[$f] = [
$header[$f] => $r,
];
$f++;
}

}

//初始化集合
$insert = collect($arr);

//转为一维集合
$e = $insert->collapse();

//转换为数组
$ee = $e->toArray();

//写入数据库
DB::table('你的表')->insert([$ee]);
}

//提示,当然,可以自己用try来处理数据库异常,这里懒得处理了。。。
$success = new MessageBag([
'title' => '恭喜',
'message' => '导入成功',
]);

return back()->with(compact('success'));

}

//如果是get请求,则返回上传页面
if ($method == 'GET')
{
return Admin::content(function (Content $content) {

$content->header('balabala');
$content->description('导入数据');
$content->body(view('GlobalUpload'));
});
}
}
//调用上传按钮
xxController.php

//在控制器的grid方法里面加入按钮
$grid->tools(function ($tools) {
$tools->append(new GlobalUploadButton());
});
//上传按钮的定义
Extensions\GlobalUploadButton.php

<?php

namespace App\Admin\Extensions\Tools;

use Encore\Admin\Grid\Tools\AbstractTool;
use Illuminate\Support\Facades\URL;

/**
* 全局上传数据按钮
*/

class GlobalUploadButton extends AbstractTool
{

public function __construct()
{
$this->url = URL::current().'/upload';
}


public function render()
{
$options = [
$this->url => '导入数据',
];

return view('tools.GlobalUploadButton', compact('options'));
}
}

resources\views\tools\GlobalUploadButton.blade.php
//上传按钮的html

<div class="btn-group" data-toggle="buttons">
@foreach($options as $option => $label)
<a class="btn btn-danger btn-sm" href="{{ $option }}" value='{{ $option }}'>{{$label}}</a>
@endforeach
</div>

resources\views\GlobalUpload.blade.php
//上传页面

<div class="col-md-12">
<div class="box box-info">
<div class="box-header with-border">
<h3 class="box-title">导入数据</h3>
<div class="box-tools">
<div class="btn-group pull-right" style="margin-right: 5px">
<a href="{{url()->current(-1)}}" class="btn btn-sm btn-default"><i class="fa fa-list"></i> 列表</a>
</div>
</div>
</div>
<!-- /.box-header -->
<!-- form start -->
<form action="{{URL::current()}}" method="post" accept-charset="UTF-8" class="form-horizontal" enctype="multipart/form-data" pjax-container="">

<div class="box-body">
<div class="fields-group">
<div class="form-group ">
<label for="tt" class="col-sm-2 control-label">上传文件</label>
<div class="col-sm-8">
<input type="file" class="upfile" name="upfile">
</div>
</div>
</div>
</div>
<!-- /.box-body -->
<div class="box-footer">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="col-md-2">
</div>
<div class="col-md-8">
<div class="btn-group pull-right">
<button type="submit" class="btn btn-primary">提交</button>
</div>
<div class="btn-group pull-left">
<button type="reset" class="btn btn-warning">撤销</button>
</div>
</div>
</div>
<input type="hidden" name="_previous_" value="{{URL::current()}}" class="_previous_">
<!-- /.box-footer -->
</form>
</div>
<div class="alert alert-info" role="alert">提示。。。balabala</div>
</div>
Windows 10激活码

Windows 10激活码

专业版:W269N-WFGWX-YVC9B-4J6C9-T83GX
企业版:NPPR9-FWDCX-D2C8J-H872K-2YT43
家庭版:TX9XD-98N7V-6WMQ6-BX7FG-H8Q99
教育版:NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
专业版N:MH37W-N47XK-V7XM9-C7227-GCQG9
企业版N:DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
教育版N:2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
企业版LSTB:WNMTR-4C88C-JK8YV-HQ7T2-76DF9
企业版LSTB N:2F77B-TNFGY-69QQF-B8YKP-D69TJ

激活方法:
系统安装完毕后,首先以管理员身份打开CMD命令行窗口,按下Win+X,选择命令提示符(管理员)。
说明:kms.xspace.in是kms服务器地址,可能会失效,如果激活失败,可以自行搜索kms服务器地址,将kms.xspace.in替换成新的地址即可,比如换成kms.03k.org,参考可用的kms激活服务器有哪些
Win10专业版用户请依次输入:
slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr /skms kms.03k.org
slmgr /ato

ElementaryOS解决boot空间不足的问题

ElementaryOS解决boot空间不足的问题

用elementary os的时候出现过boot空间不够无法更新的情况,清理一下就行了,装系统的时候最好只分2个区,/ 和 /home,对小白来说是最方便的。熟悉了再单独分/boot、/val之类的

解决方法:sudo apt-get remove –purge $(dpkg -l ‘linux-*’ | sed ‘/^ii/!d;/'”$(uname -r | sed “s/\(.*\)-\([^0-9]\+\)/\1/”)”‘/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d’)

Linux服务器通过iptable封ip

Linux服务器通过iptable封ip

最近服务器老被个北京的ip扫密码,服务商老是发邮件过来提醒我,烦死了,但是关邮件提醒又不行,万一被黑了呢 =_=!!!
所以这里就用iptables来控制一下~

有几种模式

1、封单ip
[code]iptables -I INPUT -s 192.168.1.111 -j DROP [/code]
2、封ip段
[code]iptables -I INPUT -s 192.168.0.0/16 -j DROP[/code]

封整个段的命令是
iptables -I INPUT -s 211.0.0.0/8 -j DROP

封几个段的命令是
iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP

Linux FTP 工作模式和切换方法

Linux FTP 工作模式和切换方法

FTP有两种工作模式,Port和Pasv。

Port是主动模式

Pasv是被动模式

处于被动模式下,当我们在终端链接FTP后输入命令就会出现500错误,例如

500 Illegal PORT command
ftp: bind: Address already in use

这时候只需切换到主动模式即可解决。

终端输入:passive

例如:

ftp> passive
Passive mode on.

即可切换FTP的工作模式,切换到被动模式即再输入一次这个命令。