2023-03-07 13:58:14 +08:00

135 lines
3.0 KiB
PHP

<?php
namespace Modules\Develop\Http\Controllers;
use Catch\Base\CatchController;
use Catch\CatchAdmin;
use Catch\Contracts\ModuleRepositoryInterface;
use Catch\Exceptions\FailedException;
use Catch\Support\Module\ModuleRepository;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Storage;
use Modules\Develop\Support\Generate\Module;
use Modules\Develop\Support\ModuleInstall;
class ModuleController extends CatchController
{
protected ModuleRepository $repository;
/**
* @param ModuleRepository $repository
*/
public function __construct(ModuleRepository $repository)
{
$this->repository = $repository;
}
/**
* index
*
* @param Request $request
* @return Collection
*/
public function index(Request $request): Collection
{
return $this->repository->all($request->all());
}
/**
* store
*
* @param Request $request
* @return bool|int
*/
public function store(Request $request): bool|int
{
return $this->repository->create($request->all());
}
/**
* show
*
* @param string $name
* @return Collection
* @throws \Exception
*/
public function show(mixed $name): Collection
{
return $this->repository->show($name);
}
/**
* update
*
* @param $name
* @param Request $request
* @return bool|int
*/
public function update($name, Request $request): bool|int
{
return $this->repository->update($name, $request->all());
}
/**
* update
*
* @param $name
* @return bool|int
*/
public function enable($name): bool|int
{
return $this->repository->disOrEnable($name);
}
/**
* destroy
*
* @param $name
* @return bool|int
* @throws \Exception
*/
public function destroy($name): bool|int
{
return $this->repository->delete($name);
}
/**
* install
*
* @param Request $request
* @param ModuleRepositoryInterface $moduleRepository
* @return true
*/
public function install(Request $request, ModuleRepositoryInterface $moduleRepository)
{
if ($moduleRepository->all()->pluck('name')->contains($request->get('title'))) {
throw new FailedException('模块已安装,无法再次安装');
}
$moduleInstall = new ModuleInstall($request->get('type'));
$moduleInstall->install($request->all());
return true;
}
/**
* upload
*
* @param Request $request
* @return string
*/
public function upload(Request $request)
{ $file = $request->file('file');
Storage::build([
'driver' => 'local',
'root' => storage_path('app')
])->put($file->getClientOriginalName(), $file->getContent());
return storage_path('app') . DIRECTORY_SEPARATOR . $file->getClientOriginalName();
}
}