在 Laravel 中使用 Laravel Excel 实现 Excel/CSV 文件导出功能

首先在 Laravel 项目根目录下使用 Composer 安装依赖:

composer require maatwebsite/excel

在 config/app.php 中注册服务提供者到 providers 数组:

Maatwebsite\Excel\ExcelServiceProvider::class,

同样在 config/app.php 中注册门面到 aliases 数组:

'Excel' => Maatwebsite\Excel\Facades\Excel::class,

如果想要对 Laravel Excel 进行更多的自定义配置,执行如下 Artisan 命令:

php artisan vendor:publish

执行成功后会在 config 目录下生成一个配置文件 excel.php 。

接下来,创建一个导出类:

php artisan make:export UsersExport --model=User

在 app/Exports 目录下将会生成一个 UsersExport.php 文件,内容如下:

<?php

namespace App\Exports;

use App\User;
use Maatwebsite\Excel\Concerns\FromCollection;

class UsersExport implements FromCollection
{
    public function collection()
    {
        return User::all();
    }
}

然后在控制器中就可以调用导出功能:

<?php

namespace App\Http\Controllers;

use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;

class UsersController extends Controller 
{
    public function export() 
    {
        return Excel::download(new UsersExport, 'users.xlsx');
    }
}

添加访问路由:

Route::get('users/export/', 'UsersController@export');

备注:要配合 Model 一起使用,并且 config/database.php 文件中必须配置有 connections[mysql] 值,否则调用时会报错:“Database connection [mysql] not configured. ”,详细使用方法可参看官方文档( https://docs.laravel-excel.com/3.1/exports/ )。

将一个字串中含有全角的数字字符、字母、空格或’%+-()’字符转换为相应半角字符

/**
 *  将一个字串中含有全角的数字字符、字母、空格或'%+-()'字符转换为相应半角字符
 *
 * @access  public
 * @param   string       $str         待转换字串
 *
 * @return  string       $str         处理后字串
 */
function make_semiangle($str) {
    $arr = array('0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4',
        '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9',
        'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D', 'E' => 'E',
        'F' => 'F', 'G' => 'G', 'H' => 'H', 'I' => 'I', 'J' => 'J',
        'K' => 'K', 'L' => 'L', 'M' => 'M', 'N' => 'N', 'O' => 'O',
        'P' => 'P', 'Q' => 'Q', 'R' => 'R', 'S' => 'S', 'T' => 'T',
        'U' => 'U', 'V' => 'V', 'W' => 'W', 'X' => 'X', 'Y' => 'Y',
        'Z' => 'Z', 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd',
        'e' => 'e', 'f' => 'f', 'g' => 'g', 'h' => 'h', 'i' => 'i',
        'j' => 'j', 'k' => 'k', 'l' => 'l', 'm' => 'm', 'n' => 'n',
        'o' => 'o', 'p' => 'p', 'q' => 'q', 'r' => 'r', 's' => 's',
        't' => 't', 'u' => 'u', 'v' => 'v', 'w' => 'w', 'x' => 'x',
        'y' => 'y', 'z' => 'z',
        '(' => '(', ')' => ')', '[' => '[', ']' => ']', '【' => '[',
        '】' => ']', '〖' => '[', '〗' => ']', '「' => '[', '」' => ']',
        '『' => '[', '』' => ']', '{' => '{', '}' => '}', '《' => '<',
        '》' => '>',
        '%' => '%', '+' => '+', '—' => '-', '-' => '-', '~' => '-',
        ':' => ':', '。' => '.', '、' => ',', ',' => '.', '、' => '.',
        ';' => ',', '?' => '?', '!' => '!', '…' => '-', '‖' => '|',
        '"' => '"', ''' => '`', '`' => '`', '|' => '|', '〃' => '"',
        ' ' => ' ');

    return strtr($str, $arr);
}

Laravel将$fillable应用于update()

因为所有的 Eloquent 模型都默认不可进行批量赋值,而 $fillable 属性可以看作是批量赋值的“白名单”,定义了它就可以批量赋值了,但也只能应用于 create() 方法,如想要在 update() 方法中同样有效,须结合$request->only()与Eloquent模型的getFillable()一起使用:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $primaryKey = 'id';
    /**
     * 可以被批量赋值的属性。
     *
     * @var array
     */
    protected $fillable = ['name', 'avatar', 'job'];
}

用法举例:

$result = App\User::where('id', $id)->update($request->only((new App\User)->getFillable()));

svn使用post-commit实现自动部署,自动checkout,自动update(生产环境与svn服务处于同一服务器)

以admin.01h.net项目为例,仓库地址为:svn://01h.net/admin,生产环境目录为:/home/wwwroot/admin.01h.net,svn版本库目录为:/var/svn/admin。先进入svn版本库的hooks目录:

cd /var/svn/admin/hooks
cp post-commit.tmpl post-commit  //复制post-commit.tmpl 改名为post-commit
> post-commit  //清空内容
vi post-commit  //编辑文件

写入以下内容:

#!/bin/sh
export LANG=zh_CN.UTF-8
/usr/bin/svn update --username **** --password **** /home/wwwroot/admin.01h.net

其中第一行意思是用sh来解析这个脚本,因为各种shell的语法有细微的差别。
第二行是编码格式,这里使用的是UTF-8。
最后一行/usr/bin/svn 是svn可执行文件的路径,后半句分别是用户名、密码、和项目路径。

修改post-commit的可执行权限:

chmod 755 post-commit

进入项目目录/home/wwwroot/admin.01h.net,checkout整个项目。

cd /home/wwwroot/admin.01h.net
svn co svn://01h.net/admin .

Linux最常用操作:vim全选,全部复制,全部删除

全选(高亮显示):按esc后,然后ggvG或者ggVG
全部复制 :按esc后,然后ggyG
全部删除 :按esc后,然后dG

解析:
gg :是让光标移到首行,在vim才有效,vi中无效。
v :是进入Visual(可视)模式。
G :光标移到最后一行。

选中内容以后就可以其他的操作了,比如:
d :删除选中内容。
y :复制选中内容到0号寄存器。
“+y :复制选中内容到+寄存器,也就是系统的剪贴板,供其他程序用。