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


PHP UrlHelper::getActionUrl方法代码示例

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


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

示例1: obfuscateAssetUrl

 public function obfuscateAssetUrl($asset)
 {
     craft()->fixMeALink->cleanUpStaleLinks();
     $obfuscated_link_hash = craft()->fixMeALink->saveAssetLink($asset);
     $obfuscated_link = UrlHelper::getActionUrl('fixMeALink/link/followLink', array('hash' => $obfuscated_link_hash));
     return $obfuscated_link;
 }
开发者ID:clearbold,项目名称:fixmealink,代码行数:7,代码来源:FixMeALinkTwigExtension.php

示例2: init

 public function init()
 {
     Craft::log(__METHOD__, LogLevel::Info, true);
     // request params
     $providerHandle = craft()->request->getParam('provider');
     $namespace = craft()->request->getParam('namespace');
     $scope = unserialize(base64_decode(craft()->request->getParam('scope')));
     // userMode
     $userMode = false;
     if (!$namespace) {
         $userMode = true;
     }
     // clean session vars
     if (!craft()->httpSession->get('oauth.social')) {
         craft()->oauth->sessionClean();
     }
     // set session vars
     craft()->oauth->sessionAdd('oauth.providerClass', $providerHandle);
     craft()->oauth->sessionAdd('oauth.userMode', $userMode);
     craft()->oauth->sessionAdd('oauth.referer', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null);
     craft()->oauth->sessionAdd('oauth.scope', $scope);
     // redirect
     $url = UrlHelper::getActionUrl('oauth/public/connect/', array('provider' => $providerHandle, 'namespace' => $namespace));
     $this->redirect($url);
 }
开发者ID:besimhu,项目名称:CraftCMS-Boilerplate,代码行数:25,代码来源:Oauth_ConnectController.php

示例3: actionConnect

 /**
  * Connect
  *
  * @return null
  */
 public function actionConnect()
 {
     $referer = craft()->request->getUrlReferrer();
     $providerHandle = craft()->request->getParam('provider');
     craft()->httpSession->add('oauth.console.referer', $referer);
     craft()->httpSession->add('oauth.console.providerHandle', $providerHandle);
     craft()->httpSession->remove('oauth.console.token.' . $providerHandle);
     $this->redirect(UrlHelper::getActionUrl('oauth/console/connectStep2'));
 }
开发者ID:richardsongo,项目名称:craft-oauth,代码行数:14,代码来源:Oauth_ConsoleController.php

示例4: actionConnect

 public function actionConnect()
 {
     $referer = craft()->httpSession->get('socialPoster.referer');
     if (!$referer) {
         $referer = craft()->request->getUrlReferrer();
         craft()->httpSession->add('socialPoster.referer', $referer);
     }
     $handle = craft()->request->getParam('handle');
     $redirectUrl = UrlHelper::getActionUrl('socialPoster/oauth/connect', array('handle' => $handle));
     $this->redirect($redirectUrl);
 }
开发者ID:engram-design,项目名称:SocialPoster,代码行数:11,代码来源:SocialPoster_AccountsController.php

示例5: downvoteAction

 public function downvoteAction($comment, $options = array())
 {
     $user = craft()->userSession->getUser();
     $params = array('id' => $comment->id, 'return' => craft()->request->getUrl());
     // Only logged in users can downvote a comment
     if ($user) {
         // Ensure the user hasn't voted yet
         $hasVoted = craft()->comments_vote->hasDownVoted($comment, $user);
         if (!$hasVoted) {
             return UrlHelper::getActionUrl('comments/downvoteComment', $params);
         }
     }
 }
开发者ID:Uxiliary,项目名称:Comments,代码行数:13,代码来源:CommentsHelper.php

示例6: removeAction

 public static function removeAction($itemId, $listId = null, $options = array())
 {
     $params = array();
     $params['itemId'] = $itemId;
     $params['return'] = craft()->request->getUrl();
     if ($listId !== null) {
         $params['listId'] = $listId;
     }
     if (isset($options['return'])) {
         $params['return'] = $options['return'];
     }
     return UrlHelper::getActionUrl('shortlist/item/remove', $params);
 }
开发者ID:jamiepittock,项目名称:WhereForArt,代码行数:13,代码来源:ShortlistHelper.php

示例7: init

 public function init()
 {
     Craft::log(__METHOD__, LogLevel::Info, true);
     // request params
     $params = array();
     $params['provider'] = craft()->request->getParam('provider');
     $params['namespace'] = craft()->request->getParam('namespace');
     // clean session vars
     craft()->oauth->sessionClean();
     craft()->oauth->sessionAdd('oauth.referer', $_SERVER['HTTP_REFERER']);
     // redirect
     $url = UrlHelper::getActionUrl('oauth/public/disconnect/', $params);
     $this->redirect($url);
 }
开发者ID:besimhu,项目名称:CraftCMS-Boilerplate,代码行数:14,代码来源:Oauth_DisconnectController.php

示例8: form

 /**
  * Returns our dropzone form to the template
  * @param  array  $config An array of settings
  * @return String         The resulting HTML form
  */
 public function form($config = array())
 {
     $this->_includeDropzoneResources();
     $actionUrl = UrlHelper::getActionUrl('dropzone/upload');
     $form = "<form method=\"POST\" enctype=\"multipart/form-data\" class=\"dropzone\" action=\"{$actionUrl}\">";
     if (isset($config['sourceId'])) {
         $form .= "<input type=\"hidden\" name=\"sourceId\" value=\"{$config['sourceId']}\">";
     }
     if (isset($config['allowAnonymous'])) {
         $form .= "<input type=\"hidden\" name=\"allowAnonymous\" value=\"{$config['allowAnonymous']}\">";
     }
     $form .= "</form>";
     return $form;
 }
开发者ID:webremote,项目名称:craft-dropzone,代码行数:19,代码来源:DropzoneService.php

示例9: actionDownload

 /**
  * Download
  *
  * @return null
  */
 public function actionDownload()
 {
     Craft::log(__METHOD__, LogLevel::Info, true);
     $pluginHandle = craft()->request->getParam('plugin');
     // download plugin (includes download, unzip)
     $download = $this->pluginService->download($pluginHandle);
     if ($download['success'] == true) {
         $this->redirect(UrlHelper::getActionUrl($this->pluginHandle . '/plugin/install', array('plugin' => $pluginHandle, 'redirect' => craft()->request->getUrlReferrer())));
     } else {
         // download failure
         $msg = 'Couldn’t install plugin.';
         if (isset($download['msg'])) {
             $msg = $download['msg'];
         }
         Craft::log(__METHOD__ . ' : ' . $msg, LogLevel::Info, true);
         craft()->userSession->setError(Craft::t($msg));
     }
     // redirect
     $this->redirect(craft()->request->getUrlReferrer());
 }
开发者ID:aladrach,项目名称:Bluefoot-Craft-Starter,代码行数:25,代码来源:Analytics_PluginController.php

示例10: actionEditCategory

 /**
  * Displays the category edit page.
  *
  * @param array $variables The route variables.
  *
  * @throws HttpException
  * @return null
  */
 public function actionEditCategory(array $variables = array())
 {
     $this->_prepEditCategoryVariables($variables);
     $this->_enforceEditCategoryPermissions($variables['category']);
     // Parent Category selector variables
     // ---------------------------------------------------------------------
     if ($variables['group']->maxLevels != 1) {
         $variables['elementType'] = new ElementTypeVariable(craft()->elements->getElementType(ElementType::Category));
         // Define the parent options criteria
         $variables['parentOptionCriteria'] = array('locale' => $variables['localeId'], 'groupId' => $variables['group']->id, 'status' => null, 'localeEnabled' => null);
         if ($variables['group']->maxLevels) {
             $variables['parentOptionCriteria']['level'] = '< ' . $variables['group']->maxLevels;
         }
         if ($variables['category']->id) {
             // Prevent the current category, or any of its descendants, from being options
             $idParam = array('and', 'not ' . $variables['category']->id);
             $descendantCriteria = craft()->elements->getCriteria(ElementType::Category);
             $descendantCriteria->descendantOf = $variables['category'];
             $descendantCriteria->status = null;
             $descendantCriteria->localeEnabled = null;
             $descendantIds = $descendantCriteria->ids();
             foreach ($descendantIds as $id) {
                 $idParam[] = 'not ' . $id;
             }
             $variables['parentOptionCriteria']['id'] = $idParam;
         }
         // Get the initially selected parent
         $parentId = craft()->request->getParam('parentId');
         if ($parentId === null && $variables['category']->id) {
             $parentIds = $variables['category']->getAncestors(1)->status(null)->localeEnabled(null)->ids();
             if ($parentIds) {
                 $parentId = $parentIds[0];
             }
         }
         if ($parentId) {
             $variables['parent'] = craft()->categories->getCategoryById($parentId, $variables['localeId']);
         }
     }
     // Other variables
     // ---------------------------------------------------------------------
     // Page title
     if (!$variables['category']->id) {
         $variables['title'] = Craft::t('Create a new category');
     } else {
         $variables['docTitle'] = $variables['title'] = $variables['category']->title;
     }
     // Breadcrumbs
     $variables['crumbs'] = array(array('label' => Craft::t('Categories'), 'url' => UrlHelper::getUrl('categories')), array('label' => Craft::t($variables['group']->name), 'url' => UrlHelper::getUrl('categories/' . $variables['group']->handle)));
     foreach ($variables['category']->getAncestors() as $ancestor) {
         $variables['crumbs'][] = array('label' => $ancestor->title, 'url' => $ancestor->getCpEditUrl());
     }
     // Enable Live Preview?
     if (!craft()->request->isMobileBrowser(true) && craft()->categories->isGroupTemplateValid($variables['group'])) {
         craft()->templates->includeJs('Craft.LivePreview.init(' . JsonHelper::encode(array('fields' => '#title-field, #fields > div > div > .field', 'extraFields' => '#settings', 'previewUrl' => $variables['category']->getUrl(), 'previewAction' => 'categories/previewCategory', 'previewParams' => array('groupId' => $variables['group']->id, 'categoryId' => $variables['category']->id, 'locale' => $variables['category']->locale))) . ');');
         $variables['showPreviewBtn'] = true;
         // Should we show the Share button too?
         if ($variables['category']->id) {
             // If the category is enabled, use its main URL as its share URL.
             if ($variables['category']->getStatus() == BaseElementModel::ENABLED) {
                 $variables['shareUrl'] = $variables['category']->getUrl();
             } else {
                 $variables['shareUrl'] = UrlHelper::getActionUrl('categories/shareCategory', array('categoryId' => $variables['category']->id, 'locale' => $variables['category']->locale));
             }
         }
     } else {
         $variables['showPreviewBtn'] = false;
     }
     // Set the base CP edit URL
     $variables['baseCpEditUrl'] = 'categories/' . $variables['group']->handle . '/{id}-{slug}';
     // Set the "Continue Editing" URL
     $variables['continueEditingUrl'] = $variables['baseCpEditUrl'] . (craft()->isLocalized() && craft()->getLanguage() != $variables['localeId'] ? '/' . $variables['localeId'] : '');
     // Render the template!
     craft()->templates->includeCssResource('css/category.css');
     $this->renderTemplate('categories/_edit', $variables);
 }
开发者ID:jmstan,项目名称:craft-website,代码行数:83,代码来源:CategoriesController.php

示例11: getPasswordResetUrl

 /**
  * Sets a new verification code on a user, and returns their new Password Reset URL.
  *
  * @param UserModel $user The user that should get the new Password Reset URL
  *
  * @return string The new Password Reset URL.
  */
 public function getPasswordResetUrl(UserModel $user)
 {
     $userRecord = $this->_getUserRecordById($user->id);
     $unhashedVerificationCode = $this->_setVerificationCodeOnUserRecord($userRecord);
     $userRecord->save();
     if ($user->can('accessCp')) {
         $url = UrlHelper::getActionUrl('users/setpassword', array('code' => $unhashedVerificationCode, 'id' => $userRecord->uid), craft()->request->isSecureConnection() ? 'https' : 'http');
     } else {
         // We want to hide the CP trigger if they don't have access to the CP.
         $path = craft()->config->get('actionTrigger') . '/users/setpassword';
         $url = UrlHelper::getSiteUrl($path, array('code' => $unhashedVerificationCode, 'id' => $userRecord->uid), craft()->request->isSecureConnection() ? 'https' : 'http');
     }
     return $url;
 }
开发者ID:webremote,项目名称:craft_boilerplate,代码行数:21,代码来源:UsersService.php

示例12: handleRequestEnd

    /**
     * Figure out how to initiate a new task runner.
     */
    public function handleRequestEnd()
    {
        // Make sure a future call to craft()->end() dosen't trigger this a second time
        craft()->detachEventHandler('onEndRequest', array($this, '_onEndRequest'));
        // Make sure nothing has been output to the browser yet, and there's no pending response body
        if (!headers_sent() && !ob_get_length()) {
            $this->closeAndRun();
        } else {
            if (craft()->request->isSiteRequest() && in_array(HeaderHelper::getMimeType(), array('text/html', 'application/xhtml+xml')) && !craft()->request->isAjaxRequest()) {
                // Just output JS that tells the browser to fire an Ajax request to kick off task running
                $url = JsonHelper::encode(UrlHelper::getActionUrl('tasks/runPendingTasks'));
                // Ajax request code adapted from http://www.quirksmode.org/js/xmlhttp.html - thanks ppk!
                echo <<<EOT
<script type="text/javascript">
/*<![CDATA[*/
(function(){
\tvar XMLHttpFactories = [
\t\tfunction () {return new XMLHttpRequest()},
\t\tfunction () {return new ActiveXObject("Msxml2.XMLHTTP")},
\t\tfunction () {return new ActiveXObject("Msxml3.XMLHTTP")},
\t\tfunction () {return new ActiveXObject("Microsoft.XMLHTTP")}
\t];
\tvar req = false;
\tfor (var i = 0; i < XMLHttpFactories.length; i++) {
\t\ttry {
\t\t\treq = XMLHttpFactories[i]();
\t\t}
\t\tcatch (e) {
\t\t\tcontinue;
\t\t}
\t\tbreak;
\t}
\tif (!req) return;
\treq.open('GET', {$url}, true);
\tif (req.readyState == 4) return;
\treq.send();
})();
/*]]>*/
</script>
EOT;
            }
        }
    }
开发者ID:codeforamerica,项目名称:oakland-beta,代码行数:46,代码来源:TasksService.php

示例13: actionEditEntryTemplate

 /**
  * Route Controller for Edit Entry Template
  *
  * @param array $variables
  *
  * @throws HttpException
  * @throws Exception
  */
 public function actionEditEntryTemplate(array $variables = array())
 {
     $entryId = craft()->request->getSegment(4);
     $campaignId = craft()->request->getSegment(3);
     // Check if we already have an entry route variable
     // If so it's probably due to a bad form submission and has an error object
     // that we don't want to overwrite.
     if (!isset($variables['entry'])) {
         if (is_numeric($entryId)) {
             $variables['entry'] = craft()->elements->getElementById($entryId);
             $variables['entryId'] = $entryId;
         } else {
             $variables['entry'] = new SproutEmail_EntryModel();
         }
     }
     if (!is_numeric($campaignId)) {
         $campaignId = $variables['entry']->campaignId;
     }
     $variables['campaign'] = sproutEmail()->campaigns->getCampaignById($campaignId);
     $variables['campaignId'] = $campaignId;
     // Tabs
     $variables['tabs'] = array();
     foreach ($variables['campaign']->getFieldLayout()->getTabs() as $index => $tab) {
         // Do any of the fields on this tab have errors?
         $hasErrors = false;
         if ($variables['entry']->hasErrors()) {
             foreach ($tab->getFields() as $field) {
                 if ($variables['entry']->getErrors($field->getField()->handle)) {
                     $hasErrors = true;
                     break;
                 }
             }
         }
         $variables['tabs'][] = array('url' => '#tab' . ($index + 1), 'label' => Craft::t($tab->name), 'class' => $hasErrors ? 'error' : null);
     }
     $shareParamsHtml = array('entryId' => $variables['entry']->id, 'template' => 'html');
     $shareParamsText = array('entryId' => $variables['entry']->id, 'template' => 'txt');
     // Enable Live Preview?
     if (!craft()->request->isMobileBrowser(true) && sproutEmail()->doesSiteTemplateExist($variables['campaign']->template)) {
         craft()->templates->includeJs('Craft.LivePreview.init(' . JsonHelper::encode(array('fields' => '#subjectLine-field, #title-field, #fields > div > div > .field', 'extraFields' => '#settings', 'previewUrl' => $variables['entry']->getUrl(), 'previewAction' => 'sproutEmail/entry/livePreviewEntry', 'previewParams' => array('entryId' => $variables['entry']->id, 'campaignId' => $variables['campaign']->id))) . ');');
         $variables['showPreviewBtn'] = true;
         // Should we show the Share button too?
         if ($variables['entry']->id) {
             if ($variables['entry']->enabled) {
                 $variables['shareUrl'] = $variables['entry']->getUrl();
             } else {
                 $shareParams = array('entryId' => $variables['entry']->id, 'campaignId' => $variables['campaign']->id);
                 $variables['shareUrl'] = UrlHelper::getActionUrl('sproutEmail/entry/shareEntry', $shareParams);
             }
         }
     } else {
         $variables['showPreviewBtn'] = false;
     }
     if ($variables['campaign']->type == 'notification') {
         $notificationId = null;
         $notification = sproutEmail()->notifications->getNotification(array('campaignId' => $campaignId));
         if ($notification) {
             $notificationId = $notification->eventId;
         }
         $variables['notificationEvent'] = $notificationId;
     }
     $variables['shareUrlHtml'] = UrlHelper::getActionUrl('sproutEmail/entry/shareEntry', $shareParamsHtml);
     $variables['shareUrlText'] = UrlHelper::getActionUrl('sproutEmail/entry/shareEntry', $shareParamsText);
     // end <
     $variables['recipientLists'] = sproutEmail()->entries->getRecipientListsByEntryId($entryId);
     $this->renderTemplate('sproutemail/entries/_edit', $variables);
 }
开发者ID:aladrach,项目名称:Bluefoot-Craft-Starter,代码行数:75,代码来源:SproutEmail_EntryController.php

示例14: link

 /**
  * craft.sass.link() returns a URL that will return the compiled, CSS
  * version of a specified Sass file. The path should be relative to the
  * document root.
  *
  * @param string $filename  File to compile.
  * @return string           Relative URL to the compiled CSS version.
  */
 public function link($filename)
 {
     return UrlHelper::getActionUrl('sass/compiler/sass', array('filename' => $filename));
 }
开发者ID:imarc,项目名称:craft-sass,代码行数:12,代码来源:SassVariable.php

示例15: actionEditEntry


//.........这里部分代码省略.........
         if ($variables['entry']->id) {
             $variables['enabledLocales'] = craft()->elements->getEnabledLocalesForElement($variables['entry']->id);
         } else {
             $variables['enabledLocales'] = array();
             foreach ($variables['section']->getLocales() as $locale) {
                 if ($locale->enabledByDefault) {
                     $variables['enabledLocales'][] = $locale->locale;
                 }
             }
         }
     }
     // Page title w/ revision label
     if (craft()->getEdition() >= Craft::Client) {
         switch ($variables['entry']->getClassHandle()) {
             case 'EntryDraft':
                 $variables['revisionLabel'] = $variables['entry']->name;
                 break;
             case 'EntryVersion':
                 $variables['revisionLabel'] = Craft::t('Version {num}', array('num' => $variables['entry']->num));
                 break;
             default:
                 $variables['revisionLabel'] = Craft::t('Current');
         }
     }
     if (!$variables['entry']->id) {
         $variables['title'] = Craft::t('Create a new entry');
     } else {
         $variables['docTitle'] = Craft::t($variables['entry']->title);
         $variables['title'] = HtmlHelper::encode(Craft::t($variables['entry']->title));
         if (craft()->getEdition() >= Craft::Client && $variables['entry']->getClassHandle() != 'Entry') {
             $variables['title'] .= ' <span class="hidden">(' . $variables['revisionLabel'] . ')</span>';
         }
     }
     // Breadcrumbs
     $variables['crumbs'] = array(array('label' => Craft::t('Entries'), 'url' => UrlHelper::getUrl('entries')));
     if ($variables['section']->type == SectionType::Single) {
         $variables['crumbs'][] = array('label' => Craft::t('Singles'), 'url' => UrlHelper::getUrl('entries/singles'));
     } else {
         $variables['crumbs'][] = array('label' => Craft::t($variables['section']->name), 'url' => UrlHelper::getUrl('entries/' . $variables['section']->handle));
         if ($variables['section']->type == SectionType::Structure) {
             foreach ($variables['entry']->getAncestors() as $ancestor) {
                 $variables['crumbs'][] = array('label' => $ancestor->title, 'url' => $ancestor->getCpEditUrl());
             }
         }
     }
     // Multiple entry types?
     $entryTypes = $variables['section']->getEntryTypes();
     if (count($entryTypes) > 1) {
         $variables['showEntryTypes'] = true;
         foreach ($entryTypes as $entryType) {
             $variables['entryTypeOptions'][] = array('label' => Craft::t($entryType->name), 'value' => $entryType->id);
         }
         craft()->templates->includeJsResource('js/EntryTypeSwitcher.js');
         craft()->templates->includeJs('new Craft.EntryTypeSwitcher();');
     } else {
         $variables['showEntryTypes'] = false;
     }
     // Enable preview mode?
     if (!craft()->request->isMobileBrowser(true) && craft()->sections->isSectionTemplateValid($variables['section'])) {
         craft()->templates->includeJsResource('js/LivePreview.js');
         craft()->templates->includeJs('Craft.livePreview = new Craft.LivePreview(' . JsonHelper::encode($variables['entry']->getUrl()) . ', "' . $variables['entry']->locale . '");');
         $variables['showPreviewBtn'] = true;
         // Should we show the Share button too?
         if ($variables['entry']->id) {
             $classHandle = $variables['entry']->getClassHandle();
             // If we're looking at the live version of an entry, just use
             // the entry's main URL as its share URL
             if ($classHandle == 'Entry' && $variables['entry']->getStatus() == EntryModel::LIVE) {
                 $variables['shareUrl'] = $variables['entry']->getUrl();
             } else {
                 switch ($classHandle) {
                     case 'EntryDraft':
                         $shareParams = array('draftId' => $variables['entry']->draftId);
                         break;
                     case 'EntryVersion':
                         $shareParams = array('versionId' => $variables['entry']->versionId);
                         break;
                     default:
                         $shareParams = array('entryId' => $variables['entry']->id, 'locale' => $variables['entry']->locale);
                         break;
                 }
                 $variables['shareUrl'] = UrlHelper::getActionUrl('entries/shareEntry', $shareParams);
             }
         }
     } else {
         $variables['showPreviewBtn'] = false;
     }
     // Set the base CP edit URL
     // Can't just use the entry's getCpEditUrl() because that might include the locale ID when we don't want it
     $variables['baseCpEditUrl'] = 'entries/' . $variables['section']->handle . '/{id}-{slug}';
     // Set the "Continue Editing" URL
     $variables['continueEditingUrl'] = $variables['baseCpEditUrl'] . (isset($variables['draftId']) ? '/drafts/' . $variables['draftId'] : '') . (craft()->isLocalized() && craft()->getLanguage() != $variables['localeId'] ? '/' . $variables['localeId'] : '');
     // Can the user delete the entry?
     $variables['canDeleteEntry'] = $variables['entry']->id && ($variables['entry']->authorId == $currentUser->id && $currentUser->can('deleteEntries' . $variables['permissionSuffix']) || $variables['entry']->authorId != $currentUser->id && $currentUser->can('deletePeerEntries' . $variables['permissionSuffix']));
     // Include translations
     craft()->templates->includeTranslations('Live Preview');
     // Render the template!
     craft()->templates->includeCssResource('css/entry.css');
     $this->renderTemplate('entries/_edit', $variables);
 }
开发者ID:kentonquatman,项目名称:portfolio,代码行数:101,代码来源:EntriesController.php


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