ThinkPHP5 使用 Laravel 的创建软链接命令 storage:link

22
22 2019-09-19 22:16:36

V5.1.24+版本开始,你可以通过命令行指令快速生成一条指令,包括指令类文件

1.创建一个自定义命令类文件

php think make:command StorageLinkCommand storage:link

2.配置 application/command.php 文件

return [
   'storage:link'   =>  'app\command\StorageLinkCommand',
];

3.新增自定义函数

if (! function_exists('base_path')) {
    /**
     * Get the path to the base folder.
     *
     * @param  string  $path
     * @return string
     */
    function base_path($path = '')
    {
        return env('root_path').($path ? ltrim($path, DIRECTORY_SEPARATOR) : ltrim($path, DIRECTORY_SEPARATOR));
    }
}

if (! function_exists('public_path')) {
    /**
     * Get the path to the public folder.
     *
     * @param  string  $path
     * @return string
     */
    function public_path($path = '')
    {
        return base_path('public').($path ? DIRECTORY_SEPARATOR.$path : $path);
    }
}

if (! function_exists('windows_os')) {
    /**
     * Determine whether the current environment is Windows based.
     *
     * @return bool
     */
    function windows_os()
    {
        return strtolower(substr(PHP_OS, 0, 3)) === 'win';
    }
}

if (! function_exists('storage_path')) {
    /**
     * Get the path to the storage folder.
     *
     * @param  string  $path
     * @return string
     */
    function storage_path($path = '')
    {
        return base_path().'storage'.($path ? DIRECTORY_SEPARATOR.$path : $path);
    }
}

以上函数均 借鉴Laravel ,提取了需要用到的部分

4.编写命令相关代码

打开步骤 1 生成的自定义命令类文件 application/command/StorageLinkCommand.php 将以下代码复制进去:

protected function configure()
{
    // 指令配置
    $this->setName('storage:link')
    // 设置参数
    ->setDescription('Create a symbolic link from "public/storage" to "storage/app/public"');
}

protected function execute(Input $input, Output $output)
{

    if (file_exists(public_path('storage'))) {
        return $this->error('The "public/storage" directory already exists.');
    }

    $this->link(
        storage_path('app/public'), public_path('storage')
    );
    // 指令输出
    $output->writeln('The [public/storage] directory has been linked.');
}

public function link($target, $link)
{
    if (! windows_os()) {
        return symlink($target, $link);
    }

    $mode = $this->isDirectory($target) ? 'J' : 'H';
    exec("mklink /{$mode} ".escapeshellarg($link).' '.escapeshellarg($target));
}

public function isDirectory($directory)
{
    return is_dir($directory);
}

以上代码同样 借鉴Laravel ,提取了需要用到的部分

5.创建命令需要的目录

根目录下创建 storage/app/public 目录

6.运行命令

项目根目录下打开命令行,输入 php think storage:link 即可使用创建软链接的命令

7.结语

最近由于项目需要,正在使用 ThinkPHP5.1 开发,但是用习惯了 Laravel 后再用其他框架,总感觉不顺手,只好自己动手把 ThinkPHP 改成自己喜欢的形状了。

本周热议
自我介绍
[ASP.NET Core 3框架揭秘] Options[6]: 扩展与定制
JavaScript Array API Syntax
从零开始在.NetCore3.1 Web项目中使用IOC
IMWebConf 2017 官网彩蛋解谜
OpenGL介绍
深入NodeJS模块系列 - os
Vue项目中使用可视化图表echarts
洛谷 P1328 生活大爆炸版石头剪刀布 (C/C++)
阿里云Centos7.X 如何对外开放端口
JAVA垃圾收集算法总结以及CMS、G1算法详解
整理下《前端江湖面试》对自己有益的题目。
C#异步编程 Task await的理解
gmap 整理
线段树的实现与应用
Idea 无法运行单元测试解决方案
Android Jetpack -- Navigation 篇
数据流中的中位数
自我介绍——蔡丽婷
这些Zepto中实用的方法集
【Java】+正则
P4392 [BOI2007]Sound 静音问题
C#MVC中@HTML中的方法
采坑记录switch坑
用 Flask 来写个轻博客 (27) — 使用 Flask-Cache 实现网页缓存加速
理发+leetcode+健身+internet security
jQuery---微博发布案例
Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) - D2. Optimal Subsequences (Hard Version)(主席树)
Bugku-CTF分析篇-中国菜刀(国产神器)
django pymysql 连接mysql 错误的方法
HaowuliaoA

微信扫码关注 HaowuliaoA 订阅号

友情链接

支付猫
链才网-区块链英才
phpEnv集成环境
广州翻译公司
Lion技术博客
花香诱人醉
LyApi框架
凉风有信
快斗博客
佩晨的博客
蛙导
layui
WebIM
layer
layDate
申请友链
QQ联系