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
改成自己喜歡的形狀了。