Xpressengine\Plugin\PluginHandler::deactivatePlugin PHP Method

deactivatePlugin() public method

주어진 플러그인을 비활성화한다.
public deactivatePlugin ( string $pluginId ) : void
$pluginId string 비활성화 할 플러그인의 id
return void
    public function deactivatePlugin($pluginId)
    {
        $entity = $this->getPlugin($pluginId);
        // 비활성화하려는 플러그인이 활성화되어있는 상태인지 체크한다.
        if ($entity->getStatus() !== static::STATUS_ACTIVATED) {
            throw new PluginAlreadyDeactivatedException();
        }
        // 비활성화하려는 플러그인에 의존하는 활성화 상태인 플러그인이 있는지 검사한다.
        // 만약 의존하는 플러그인이 있다면, 비활성화시키지 않고 예외 처리한다.
        $activateds = $this->getActivatedPlugins();
        foreach ($activateds as $activated) {
            $dependencies = $activated->getDependencies();
            if (in_array($pluginId, $dependencies)) {
                throw new PluginDependencyException();
            }
        }
        // 기존에 설치(활성화)된 적이 있는지 검사한다. 기존에 활성화된 적이 있다면 설치된 버전을 조회한다.
        $installedVersion = $entity->getInstalledVersion();
        // 플러그인 비활성화. 플러그인을 비활성화할 때마다 각 플러그인의 deactivate() 메소드를 호출해준다.
        // 각 플러그인은 deactivate() 메소드에서 자신이 XE에 설치된 상황을 파악한 후, 비활성화에 필요한 준비를 한다.
        $plugin = $entity->getObject();
        try {
            $plugin->deactivate($installedVersion);
        } catch (\Exception $e) {
            throw new PluginDeactivationFailedException();
        }
        $entity->setStatus(static::STATUS_DEACTIVATED);
        // 비활성화된 플러그인 정보를 config에 기록한다.
        $this->setPluginStatus($pluginId, ['status' => static::STATUS_DEACTIVATED, 'version' => $entity->getInstalledVersion()]);
    }

Usage Example

コード例 #1
0
 public function postDeactivatePlugin($pluginId, PluginHandler $handler)
 {
     try {
         $handler->deactivatePlugin($pluginId);
     } catch (XpressengineException $e) {
         throw new HttpException(Response::HTTP_FORBIDDEN, $e->getMessage(), $e);
     } catch (\Exception $e) {
         throw $e;
     }
     return Redirect::route('settings.plugins')->withAlert(['type' => 'success', 'message' => '플러그인을 껐습니다.']);
 }
All Usage Examples Of Xpressengine\Plugin\PluginHandler::deactivatePlugin