ThinkPHP5 使用 Laravel 的建立軟連結命令 storage:link

生活無限好發表於2019-09-19

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 即可使用建立軟連結的命令,效果圖:

ThinkPHP5 使用 Laravel 的建立軟連線命令  storage:link

7.結語

最近由於專案需要,正在使用 ThinkPHP5.1 開發,但是用習慣了 Laravel 後再用其他框架,總感覺不順手,只好自己動手把 ThinkPHP 改成自己喜歡的形狀了。

ThinkPHP5 使用 Laravel 的建立軟連線命令  storage:link

www.haowuliaoa.com

相關文章