当前位置: 首页>>代码示例>>PHP>>正文


PHP TableGateway::executeUpdate方法代码示例

本文整理汇总了PHP中Zend\Db\TableGateway\TableGateway::executeUpdate方法的典型用法代码示例。如果您正苦于以下问题:PHP TableGateway::executeUpdate方法的具体用法?PHP TableGateway::executeUpdate怎么用?PHP TableGateway::executeUpdate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Zend\Db\TableGateway\TableGateway的用法示例。


在下文中一共展示了TableGateway::executeUpdate方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: executeUpdate

 /**
  * @param Update $update
  * @return mixed
  * @throws Exception\RuntimeException
  * @throws \Directus\Acl\Exception\UnauthorizedFieldWriteException
  * @throws \Directus\Acl\Exception\UnauthorizedTableBigEditException
  * @throws \Directus\Acl\Exception\UnauthorizedTableEditException
  */
 protected function executeUpdate(Update $update)
 {
     $currentUserId = null;
     if (Auth::loggedIn()) {
         $currentUser = Auth::getUserInfo();
         $currentUserId = intval($currentUser['id']);
     }
     $updateState = $update->getRawState();
     $updateTable = $this->getRawTableNameFromQueryStateTable($updateState['table']);
     $cmsOwnerColumn = $this->acl->getCmsOwnerColumnByTable($updateTable);
     /**
      * ACL Enforcement
      */
     // check if it's NOT soft delete
     $updateFields = $updateState['set'];
     if (!(count($updateFields) == 2 && array_key_exists(STATUS_COLUMN_NAME, $updateFields) && $updateFields[STATUS_COLUMN_NAME] == STATUS_DELETED_NUM)) {
         if (!$this->acl->hasTablePrivilege($updateTable, 'bigedit')) {
             // Parsing for the column name is unnecessary. Zend enforces raw column names.
             /**
              * Enforce Privilege: "Big" Edit
              */
             if (false === $cmsOwnerColumn) {
                 // All edits are "big" edits if there is no magic owner column.
                 $aclErrorPrefix = $this->acl->getErrorMessagePrefix();
                 throw new UnauthorizedTableBigEditException($aclErrorPrefix . "The table `{$updateTable}` is missing the `user_create_column` within `directus_tables` (BigEdit Permission Forbidden)");
             } else {
                 // Who are the owners of these rows?
                 list($resultQty, $ownerIds) = $this->acl->getCmsOwnerIdsByTableGatewayAndPredicate($this, $updateState['where']);
                 // Enforce
                 if (is_null($currentUserId) || count(array_diff($ownerIds, array($currentUserId)))) {
                     $aclErrorPrefix = $this->acl->getErrorMessagePrefix();
                     throw new UnauthorizedTableBigEditException($aclErrorPrefix . "Table bigedit access forbidden on {$resultQty} `{$updateTable}` table record(s) and " . count($ownerIds) . " CMS owner(s) (with ids " . implode(", ", $ownerIds) . ").");
                 }
             }
             /**
              * Enforce write field blacklist (if user lacks bigedit privileges on this table)
              */
             $attemptOffsets = array_keys($updateState['set']);
             $this->acl->enforceBlacklist($updateTable, $attemptOffsets, Acl::FIELD_WRITE_BLACKLIST);
         }
         if (!$this->acl->hasTablePrivilege($updateTable, 'edit')) {
             /**
              * Enforce Privilege: "Little" Edit (I am the record CMS owner)
              */
             if (false !== $cmsOwnerColumn) {
                 if (!isset($predicateResultQty)) {
                     // Who are the owners of these rows?
                     list($predicateResultQty, $predicateOwnerIds) = $this->acl->getCmsOwnerIdsByTableGatewayAndPredicate($this, $updateState['where']);
                 }
                 if (in_array($currentUserId, $predicateOwnerIds)) {
                     $aclErrorPrefix = $this->acl->getErrorMessagePrefix();
                     throw new UnauthorizedTableEditException($aclErrorPrefix . "Table edit access forbidden on {$predicateResultQty} `{$updateTable}` table records owned by the authenticated CMS user (#{$currentUserId}).");
                 }
             }
         }
     }
     try {
         return parent::executeUpdate($update);
     } catch (\Zend\Db\Adapter\Exception\InvalidQueryException $e) {
         if ('production' !== DIRECTUS_ENV) {
             // @TODO: these lines are the same as the executeInsert,
             // let's put it together
             if (strpos(strtolower($e->getMessage()), 'duplicate entry') !== FALSE) {
                 throw new DuplicateEntryException($e->getMessage());
             }
             throw new \RuntimeException("This query failed: " . $this->dumpSql($update), 0, $e);
         }
         // @todo send developer warning
         throw $e;
     }
 }
开发者ID:rudderdon,项目名称:Directus,代码行数:79,代码来源:AclAwareTableGateway.php

示例2: executeUpdate

 /**
  * @param Update $update
  * @return mixed
  * @throws Exception\RuntimeException
  * @throws \Directus\Acl\Exception\UnauthorizedFieldWriteException
  * @throws \Directus\Acl\Exception\UnauthorizedTableBigEditException
  * @throws \Directus\Acl\Exception\UnauthorizedTableEditException
  */
 protected function executeUpdate(Update $update)
 {
     $currentUserId = null;
     if (Auth::loggedIn()) {
         $currentUser = Auth::getUserInfo();
         $currentUserId = intval($currentUser['id']);
     }
     $updateState = $update->getRawState();
     $updateTable = $this->getRawTableNameFromQueryStateTable($updateState['table']);
     $cmsOwnerColumn = $this->acl->getCmsOwnerColumnByTable($updateTable);
     $updateData = $updateState['set'];
     /**
      * ACL Enforcement
      */
     // check if it's NOT soft delete
     $updateFields = $updateState['set'];
     $permissionName = 'edit';
     $hasStatusColumn = array_key_exists(STATUS_COLUMN_NAME, $updateFields) ? true : false;
     if ($hasStatusColumn && $updateFields[STATUS_COLUMN_NAME] == STATUS_DELETED_NUM) {
         $permissionName = 'delete';
     }
     if (!$this->acl->hasTablePrivilege($updateTable, 'big' . $permissionName)) {
         // Parsing for the column name is unnecessary. Zend enforces raw column names.
         /**
          * Enforce Privilege: "Big" Edit
          */
         if (false === $cmsOwnerColumn) {
             // All edits are "big" edits if there is no magic owner column.
             $aclErrorPrefix = $this->acl->getErrorMessagePrefix();
             throw new UnauthorizedTableBigEditException($aclErrorPrefix . 'The table `' . $updateTable . '` is missing the `user_create_column` within `directus_tables` (BigEdit Permission Forbidden)');
         } else {
             // Who are the owners of these rows?
             list($resultQty, $ownerIds) = $this->acl->getCmsOwnerIdsByTableGatewayAndPredicate($this, $updateState['where']);
             // Enforce
             if (is_null($currentUserId) || count(array_diff($ownerIds, [$currentUserId]))) {
                 // $aclErrorPrefix = $this->acl->getErrorMessagePrefix();
                 // throw new UnauthorizedTableBigEditException($aclErrorPrefix . "Table bigedit access forbidden on $resultQty `$updateTable` table record(s) and " . count($ownerIds) . " CMS owner(s) (with ids " . implode(", ", $ownerIds) . ").");
                 $groupsTableGateway = self::makeTableGatewayFromTableName($this->acl, 'directus_groups', $this->adapter);
                 $group = $groupsTableGateway->find($this->acl->getGroupId());
                 throw new UnauthorizedTableBigEditException('[' . $group['name'] . '] permissions only allow you to [' . $permissionName . '] your own items.');
             }
         }
     }
     if (!$this->acl->hasTablePrivilege($updateTable, $permissionName)) {
         /**
          * Enforce Privilege: "Little" Edit (I am the record CMS owner)
          */
         if (false !== $cmsOwnerColumn) {
             if (!isset($predicateResultQty)) {
                 // Who are the owners of these rows?
                 list($predicateResultQty, $predicateOwnerIds) = $this->acl->getCmsOwnerIdsByTableGatewayAndPredicate($this, $updateState['where']);
             }
             if (in_array($currentUserId, $predicateOwnerIds)) {
                 $aclErrorPrefix = $this->acl->getErrorMessagePrefix();
                 throw new UnauthorizedTableEditException($aclErrorPrefix . 'Table edit access forbidden on ' . $predicateResultQty . '`' . $updateTable . '` table records owned by the authenticated CMS user (#' . $currentUserId . '.');
             }
         }
     }
     // Enforce write field blacklist
     $attemptOffsets = array_keys($updateState['set']);
     $this->acl->enforceBlacklist($updateTable, $attemptOffsets, Acl::FIELD_WRITE_BLACKLIST);
     try {
         $this->emitter->run('table.update:before', [$updateTable, $updateData]);
         $this->emitter->run('table.update.' . $updateTable . ':before', [$updateData]);
         $result = parent::executeUpdate($update);
         $this->emitter->run('table.update', [$updateTable, $updateData]);
         $this->emitter->run('table.update:after', [$updateTable, $updateData]);
         $this->emitter->run('table.update.' . $updateTable, [$updateData]);
         $this->emitter->run('table.update.' . $updateTable . ':after', [$updateData]);
         return $result;
     } catch (\Zend\Db\Adapter\Exception\InvalidQueryException $e) {
         // @TODO: these lines are the same as the executeInsert,
         // let's put it together
         if (strpos(strtolower($e->getMessage()), 'duplicate entry') !== FALSE) {
             throw new DuplicateEntryException($e->getMessage());
         }
         if ('production' !== DIRECTUS_ENV) {
             throw new \RuntimeException('This query failed: ' . $this->dumpSql($update), 0, $e);
         }
         // @todo send developer warning
         throw $e;
     }
 }
开发者ID:YounessTayer,项目名称:directus,代码行数:91,代码来源:AclAwareTableGateway.php


注:本文中的Zend\Db\TableGateway\TableGateway::executeUpdate方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。