trafficmonitor/app/Controllers/Admin/UserController.php
2025-11-10 11:29:00 +09:00

72 lines
2.7 KiB
PHP

<?php
namespace App\Controllers\Admin;
use App\DTOs\UserDTO;
use App\Entities\UserEntity;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
class UserController extends AdminController
{
public const PATH = 'user';
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
if ($this->service === null) {
$this->service = service('userservice');
}
$this->addActionPaths($this::PATH);
}
protected function getFormRule(string $action, string $field, string $rule): array
{
switch ($field) {
case 'role':
$field = "{$field}.*";
break;
}
return parent::getFormRule($action, $field, $rule);
}
//Action작업관련
protected function create_form_process(string $action): void
{
//Form Default값 설정
$formDatas = ['role' => [ROLE['USER']['MANAGER']]];
$this->addViewDatas('formDatas', $formDatas);
}
protected function create_process(string $action): string|RedirectResponse
{
//요청 데이터를 DTO 객체로 변환
$dto = new UserDTO($this->request->getPost());
$entity = $this->service->create($dto);
$redirect_url = $this->getAuthContext()->popPreviousUrl() ?? implode(DIRECTORY_SEPARATOR, $this->getActionPaths());
return redirect()->to($redirect_url)->with('message', "{$entity->getTitle()} 계정 생성이 완료되었습니다.");
}
protected function modify_form_process(string $action, $uid): void
{
if (!$uid) {
throw new \Exception("계정 번호가 정의 되지 않았습니다.");
}
$entity = $this->service->getEntity($uid);
if (!$entity instanceof UserEntity) {
throw new \Exception("{$uid}에 해당하는 계정을 찾을수 없습니다.");
}
$this->addViewDatas('entity', $entity);
}
protected function modify_process(string $action, $uid): string|RedirectResponse
{
//요청 데이터를 DTO 객체로 변환
$dto = new UserDTO($this->request->getPost());
$entity = $this->service->modify($uid, $dto);
$redirect_url = $this->getAuthContext()->popPreviousUrl() ?? implode(DIRECTORY_SEPARATOR, $this->getActionPaths());
return redirect()->to($redirect_url)->with('message', "{$entity->getTitle()} 계정 수정이 완료되었습니다.");
}
protected function view_process($uid): UserEntity
{
return parent::view_process($uid);
}
}