y 2018 13:12:10 CST">8 ans auparavant css-optional-pseudo.json 11e3a9652a first 8 ans auparavant css-overflow-anchor.json 11e3a9652a first 8 ans auparavant css-overscroll-behavior.json 11e3a9652a first 8 ans auparavant css-page-break.json 11e3a9652a first 8 ans auparavant css-paged-media.json 11e3a9652a first 8 ans auparavant css-paint-api.json 11e3a9652a first 8 ans auparavant css-placeholder-shown.json 11e3a9652a first 8 ans auparavant css-placeholder.json 11e3a9652a first 8 ans auparavant css-read-only-write.json 11e3a9652a first 8 ans auparavant css-rebeccapurple.json 11e3a9652a first 8 ans auparavant css-reflections.json 11e3a9652a first 8 ans auparavant css-regions.json 11e3a9652a first 8 ans auparavant css-repeating-gradients.json 11e3a9652a first 8 ans auparavant css-resize.json 11e3a9652a first 8 ans auparavant css-revert-value.json 11e3a9652a first 8 ans auparavant css-rrggbbaa.json 11e3a9652a first 8 ans auparavant css-scroll-behavior.json 11e3a9652a first 8 ans auparavant css-scrollbar.json 11e3a9652a first 8 ans auparavant css-sel2.json 11e3a9652a first 8 ans auparavant css-sel3.json 11e3a9652a first 8 ans auparavant css-selection.json 11e3a9652a first 8 ans auparavant css-shapes.json 11e3a9652a first 8 ans auparavant css-snappoints.json 11e3a9652a first 8 ans auparavant css-sticky.json 11e3a9652a first 8 ans auparavant css-supports-api.json 11e3a9652a first 8 ans auparavant css-table.json 11e3a9652a first 8 ans auparavant css-text-align-last.json 11e3a9652a first 8 ans auparavant css-text-indent.json 11e3a9652a first 8 ans auparavant css-text-justify.json 11e3a9652a first 8 ans auparavant css-text-orientation.json 11e3a9652a first 8 ans auparavant css-text-spacing.json 11e3a9652a first 8 ans auparavant css-textshadow.json 11e3a9652a first 8 ans auparavant css-touch-action-2.json 11e3a9652a first 8 ans auparavant css-touch-action.json 11e3a9652a first 8 ans auparavant css-transitions.json 11e3a9652a first 8 ans auparavant css-unicode-bidi.json 11e3a9652a first 8 ans auparavant css-unset-value.json 11e3a9652a first 8 ans auparavant css-variables.json 11e3a9652a first 8 ans auparavant css-widows-orphans.json 11e3a9652a first 8 ans auparavant css-writing-mode.json 11e3a9652a first 8 ans auparavant css-zoom.json 11e3a9652a first 8 ans auparavant css3-attr.json 11e3a9652a first 8 ans auparavant css3-boxsizing.json 11e3a9652a first 8 ans auparavant css3-colors.json 11e3a9652a first 8 ans auparavant css3-cursors-grab.json 11e3a9652a first 8 ans auparavant css3-cursors-newer.json 11e3a9652a first 8 ans auparavant css3-cursors.json 11e3a9652a first 8 ans auparavant css3-tabsize.json 11e3a9652a first 8 ans auparavant currentcolor.json 11e3a9652a first 8 ans auparavant custom-elements.json 11e3a9652a first 8 ans auparavant custom-elementsv1.json 11e3a9652a first 8 ans auparavant customevent.json 11e3a9652a first 8 ans auparavant datalist.json 11e3a9652a first 8 ans auparavant dataset.json 11e3a9652a first 8 ans auparavant datauri.json 11e3a9652a first 8 ans auparavant details.json 11e3a9652a first 8 ans auparavant deviceorientation.json 11e3a9652a first 8 ans auparavant devicepixelratio.json 11e3a9652a first 8 ans auparavant dialog.json 11e3a9652a first 8 ans auparavant dispatchevent.json 11e3a9652a first 8 ans auparavant do-not-track.json 11e3a9652a first 8 ans auparavant document-currentscript.json 11e3a9652a first 8 ans auparavant document-evaluate-xpath.json 11e3a9652a first 8 ans auparavant document-execcommand.json 11e3a9652a first 8 ans auparavant document-scrollingelement.json 11e3a9652a first 8 ans auparavant documenthead.json 11e3a9652a first 8 ans auparavant dom-manip-convenience.json 11e3a9652a first 8 ans auparavant dom-range.json 11e3a9652a first 8 ans auparavant domcontentloaded.json 11e3a9652a first 8 ans auparavant domfocusin-domfocusout-events.json 11e3a9652a first 8 ans auparavant dommatrix.json 11e3a9652a first 8 ans auparavant download.json 11e3a9652a first 8 ans auparavant dragndrop.json 11e3a9652a first 8 ans auparavant element-closest.json 11e3a9652a first 8 ans auparavant element-from-point.json 11e3a9652a first 8 ans auparavant eme.json 11e3a9652a first 8 ans auparavant eot.json 11e3a9652a first 8 ans auparavant es5.json 11e3a9652a first 8 ans auparavant es6-class.json 11e3a9652a first 8 ans auparavant es6-generators.json 11e3a9652a first 8 ans auparavant es6-module-dynamic-import.json 11e3a9652a first 8 ans auparavant es6-module.json 11e3a9652a first 8 ans auparavant es6-number.json 11e3a9652a first 8 ans auparavant es6-string-includes.json 11e3a9652a first 8 ans auparavant eventsource.json 11e3a9652a first 8 ans auparavant fetch.json 11e3a9652a first 8 ans auparavant fieldset-disabled.json 11e3a9652a first 8 ans auparavant fileapi.json 11e3a9652a first 8 ans auparavant filereader.json 11e3a9652a first 8 ans auparavant filereadersync.json 11e3a9652a first 8 ans auparavant filesystem.json 11e3a9652a first 8 ans auparavant flac.json 11e3a9652a first 8 ans auparavant flexbox.json 11e3a9652a first 8 ans auparavant flow-root.json 11e3a9652a first 8 ans auparavant focusin-focusout-events.json 11e3a9652a first 8 ans auparavant focusoptions-preventscroll.json 11e3a9652a first 8 ans auparavant font-family-system-ui.json 11e3a9652a first 8 ans auparavant font-feature.json 11e3a9652a first 8 ans auparavant font-kerning.json 11e3a9652a first 8 ans auparavant font-loading.json 11e3a9652a first 8 ans auparavant font-size-adjust.json 11e3a9652a first 8 ans auparavant font-smooth.json 11e3a9652a first 8 ans auparavant font-unicode-range.json 11e3a9652a first 8 ans auparavant font-variant-alternates.json 11e3a9652a first 8 ans auparavant font-variant-east-asian.json 11e3a9652a first 8 ans auparavant fontface.json 11e3a9652a first 8 ans auparavant form-attribute.json 11e3a9652a first 8 ans auparavant form-submit-attributes.json 11e3a9652a first 8 ans auparavant form-validation.json 11e3a9652a first 8 ans auparavant forms.json 11e3a9652a first 8 ans auparavant fullscreen.json 11e3a9652a first 8 ans auparavant gamepad.json 11e3a9652a first 8 ans auparavant geolocation.json 11e3a9652a first 8 ans auparavant getboundingclientrect.json 11e3a9652a first 8 ans auparavant getcomputedstyle.json 11e3a9652a first 8 ans auparavant getelementsbyclassname.json 11e3a9652a first 8 ans auparavant getrandomvalues.json 11e3a9652a first 8 ans auparavant hardwareconcurrency.json 11e3a9652a first 8 ans auparavant hashchange.json 11e3a9652a first 8 ans auparavant heif.json 11e3a9652a first 8 ans auparavant hevc.json 11e3a9652a first 8 ans auparavant hidden.json 11e3a9652a first 8 ans auparavant high-resolution-time.json 11e3a9652a first 8 ans auparavant history.json 11e3a9652a first 8 ans auparavant html-media-capture.json 11e3a9652a first 8 ans auparavant html5semantic.json 11e3a9652a first 8 ans auparavant http-live-streaming.json 11e3a9652a first 8 ans auparavant http2.json 11e3a9652a first 8 ans auparavant iframe-sandbox.json 11e3a9652a first 8 ans auparavant iframe-seamless.json 11e3a9652a first 8 ans auparavant iframe-srcdoc.json 11e3a9652a first 8 ans auparavant imagecapture.json 11e3a9652a first 8 ans auparavant ime.json 11e3a9652a first 8 ans auparavant img-naturalwidth-naturalheight.json 11e3a9652a first 8 ans auparavant imports.json 11e3a9652a first 8 ans auparavant indeterminate-checkbox.json 11e3a9652a first 8 ans auparavant indexeddb.json 11e3a9652a first 8 ans auparavant indexeddb2.json 11e3a9652a first 8 ans auparavant inline-block.json 11e3a9652a first 8 ans auparavant innertext.json 11e3a9652a first 8 ans auparavant input-autocomplete-onoff.json 11e3a9652a first 8 ans auparavant input-color.json 11e3a9652a first 8 ans auparavant input-datetime.json 11e3a9652a first 8 ans auparavant input-email-tel-url.json 11e3a9652a first 8 ans auparavant input-event.json 11e3a9652a first 8 ans auparavant input-file-accept.json 11e3a9652a first 8 ans auparavant input-file-directory.json 11e3a9652a first 8 ans auparavant input-file-multiple.json 11e3a9652a first 8 ans auparavant input-inputmode.json 11e3a9652a first 8 ans auparavant input-minlength.json 11e3a9652a first 8 ans auparavant input-number.json 11e3a9652a first 8 ans auparavant input-pattern.json 11e3a9652a first 8 ans auparavant input-placeholder.json 11e3a9652a first 8 ans auparavant input-range.json 11e3a9652a first 8 ans auparavant input-search.json 11e3a9652a first 8 ans auparavant input-selection.json 11e3a9652a first 8 ans auparavant insert-adjacent.json 11e3a9652a first 8 ans auparavant insertadjacenthtml.json 11e3a9652a first 8 ans auparavant internationalization.json 11e3a9652a first 8 ans auparavant intersectionobserver.json 11e3a9652a first 8 ans auparavant intrinsic-width.json 11e3a9652a first 8 ans auparavant jpeg2000.json 11e3a9652a first 8 ans auparavant jpegxr.json 11e3a9652a first 8 ans auparavant json.json 11e3a9652a first 8 ans auparavant kerning-pairs-ligatures.json 11e3a9652a first 8 ans auparavant keyboardevent-charcode.json 11e3a9652a first 8 ans auparavant keyboardevent-code.json 11e3a9652a first 8 ans auparavant keyboardevent-getmodifierstate.json 11e3a9652a first 8 ans auparavant keyboardevent-key.json 11e3a9652a first 8 ans auparavant keyboardevent-location.json 11e3a9652a first 8 ans auparavant keyboardevent-which.json 11e3a9652a first 8 ans auparavant lazyload.json 11e3a9652a first 8 ans auparavant let.json 11e3a9652a first 8 ans auparavant link-icon-png.json 11e3a9652a first 8 ans auparavant link-icon-svg.json 11e3a9652a first 8 ans auparavant link-rel-dns-prefetch.json 11e3a9652a first 8 ans auparavant link-rel-preconnect.json 11e3a9652a first 8 ans auparavant link-rel-prefetch.json 11e3a9652a first 8 ans auparavant link-rel-preload.json 11e3a9652a first 8 ans auparavant link-rel-prerender.json 11e3a9652a first 8 ans auparavant localecompare.json 11e3a9652a first 8 ans auparavant matchesselector.json 11e3a9652a first 8 ans auparavant matchmedia.json 11e3a9652a first 8 ans auparavant mathml.json 11e3a9652a first 8 ans auparavant maxlength.json 11e3a9652a first 8 ans auparavant media-attribute.json 11e3a9652a first 8 ans auparavant media-fragments.json 11e3a9652a first 8 ans auparavant media-session-api.json 11e3a9652a first 8 ans auparavant mediacapture-fromelement.json 11e3a9652a first 8 ans auparavant mediarecorder.json 11e3a9652a first 8 ans auparavant mediasource.json 11e3a9652a first 8 ans auparavant menu.json 11e3a9652a first 8 ans auparavant meter.json 11e3a9652a first 8 ans auparavant midi.json 11e3a9652a first 8 ans auparavant minmaxwh.json 11e3a9652a first 8 ans auparavant mp3.json 11e3a9652a first 8 ans auparavant mpeg-dash.json 11e3a9652a first 8 ans auparavant mpeg4.json 11e3a9652a first 8 ans auparavant multibackgrounds.json 11e3a9652a first 8 ans auparavant multicolumn.json 11e3a9652a first 8 ans auparavant mutation-events.json 11e3a9652a first 8 ans auparavant mutationobserver.json 11e3a9652a first 8 ans auparavant namevalue-storage.json 11e3a9652a first 8 ans auparavant nav-timing.json 11e3a9652a first 8 ans auparavant navigator-language.json 11e3a9652a first 8 ans auparavant netinfo.json 11e3a9652a first 8 ans auparavant node-contains.json 11e3a9652a first 8 ans auparavant node-parentelement.json 11e3a9652a first 8 ans auparavant notifications.json 11e3a9652a first 8 ans auparavant object-fit.json 11e3a9652a first 8 ans auparavant object-observe.json 11e3a9652a first 8 ans auparavant object-values.json 11e3a9652a first 8 ans auparavant objectrtc.json 11e3a9652a first 8 ans auparavant offline-apps.json 11e3a9652a first 8 ans auparavant offscreencanvas.json 11e3a9652a first 8 ans auparavant ogg-vorbis.json 11e3a9652a first 8 ans auparavant ogv.json 11e3a9652a first 8 ans auparavant ol-reversed.json 11e3a9652a first 8 ans auparavant once-event-listener.json 11e3a9652a first 8 ans auparavant online-status.json 11e3a9652a first 8 ans auparavant opus.json 11e3a9652a first 8 ans auparavant outline.json 11e3a9652a first 8 ans auparavant pad-start-end.json 11e3a9652a first 8 ans auparavant page-transition-events.json 11e3a9652a first 8 ans auparavant pagevisibility.json 11e3a9652a first 8 ans auparavant passive-event-listener.json 11e3a9652a first 8 ans auparavant path2d.json 11e3a9652a first 8 ans auparavant payment-request.json 11e3a9652a first 8 ans auparavant permissions-api.json 11e3a9652a first 8 ans auparavant picture.json 11e3a9652a first 8 ans auparavant ping.json 11e3a9652a first 8 ans auparavant png-alpha.json 11e3a9652a first 8 ans auparavant pointer-events.json 11e3a9652a first 8 ans auparavant pointer.json 11e3a9652a first 8 ans auparavant pointerlock.json 11e3a9652a first 8 ans auparavant prefers-reduced-motion.json 11e3a9652a first 8 ans auparavant progress.json 11e3a9652a first 8 ans auparavant promises.json 11e3a9652a first 8 ans auparavant proximity.json 11e3a9652a first 8 ans auparavant proxy.json 11e3a9652a first 8 ans auparavant publickeypinning.json 11e3a9652a first 8 ans auparavant push-api.json 11e3a9652a first 8 ans auparavant queryselector.json 11e3a9652a first 8 ans auparavant readonly-attr.json 11e3a9652a first 8 ans auparavant referrer-policy.json 11e3a9652a first 8 ans auparavant registerprotocolhandler.json 11e3a9652a first 8 ans auparavant rel-noopener.json 11e3a9652a first 8 ans auparavant rel-noreferrer.json 11e3a9652a first 8 ans auparavant rellist.json 11e3a9652a first 8 ans auparavant rem.json 11e3a9652a first 8 ans auparavant requestanimationframe.json 11e3a9652a first 8 ans auparavant requestidlecallback.json 11e3a9652a first 8 ans auparavant resizeobserver.json 11e3a9652a first 8 ans auparavant resource-timing.json 11e3a9652a first 8 ans auparavant rest-parameters.json 11e3a9652a first 8 ans auparavant rtcpeerconnection.json 11e3a9652a first 8 ans auparavant ruby.json 11e3a9652a first 8 ans auparavant run-in.json 11e3a9652a first 8 ans auparavant same-site-cookie-attribute.json 11e3a9652a first 8 ans auparavant screen-orientation.json 11e3a9652a first 8 ans auparavant script-async.json 11e3a9652a first 8 ans auparavant script-defer.json 11e3a9652a first 8 ans auparavant scrollintoview.json 11e3a9652a first 8 ans auparavant scrollintoviewifneeded.json 11e3a9652a first 8 ans auparavant sdch.json 11e3a9652a first 8 ans auparavant selection-api.json 11e3a9652a first 8 ans auparavant server-timing.json 11e3a9652a first 8 ans auparavant serviceworkers.json 11e3a9652a first 8 ans auparavant setimmediate.json 11e3a9652a first 8 ans auparavant sha-2.json 11e3a9652a first 8 ans auparavant shadowdom.json 11e3a9652a first 8 ans auparavant shadowdomv1.json 11e3a9652a first 8 ans auparavant sharedworkers.json 11e3a9652a first 8 ans auparavant sni.json 11e3a9652a first 8 ans auparavant spdy.json 11e3a9652a first 8 ans auparavant speech-recognition.json 11e3a9652a first 8 ans auparavant speech-synthesis.json 11e3a9652a first 8 ans auparavant spellcheck-attribute.json 11e3a9652a first 8 ans auparavant sql-storage.json 11e3a9652a first 8 ans auparavant srcset.json 11e3a9652a first 8 ans auparavant stopimmediatepropagation.json 11e3a9652a first 8 ans auparavant stream.json 11e3a9652a first 8 ans auparavant streams.json 11e3a9652a first 8 ans auparavant stricttransportsecurity.json 11e3a9652a first 8 ans auparavant style-scoped.json 11e3a9652a first 8 ans auparavant subresource-integrity.json 11e3a9652a first 8 ans auparavant svg-css.json 11e3a9652a first 8 ans auparavant svg-filters.json 11e3a9652a first 8 ans auparavant svg-fonts.json 11e3a9652a first 8 ans auparavant svg-fragment.json 11e3a9652a first 8 ans auparavant svg-html.json 11e3a9652a first 8 ans auparavant svg-html5.json 11e3a9652a first 8 ans auparavant svg-img.json 11e3a9652a first 8 ans auparavant svg-smil.json 11e3a9652a first 8 ans auparavant svg.json 11e3a9652a first 8 ans auparavant symbols.json 11e3a9652a first 8 ans auparavant tabindex-attr.json 11e3a9652a first 8 ans auparavant template-literals.json 11e3a9652a first 8 ans auparavant template.json 11e3a9652a first 8 ans auparavant testfeat.json 11e3a9652a first 8 ans auparavant text-decoration.json 11e3a9652a first 8 ans auparavant text-emphasis.json 11e3a9652a first 8 ans auparavant text-overflow.json 11e3a9652a first 8 ans auparavant text-size-adjust.json 11e3a9652a first 8 ans auparavant text-stroke.json 11e3a9652a first 8 ans auparavant textcontent.json 11e3a9652a first 8 ans auparavant textencoder.json 11e3a9652a first 8 ans auparavant tls1-1.json 11e3a9652a first 8 ans auparavant tls1-2.json 11e3a9652a first 8 ans auparavant tls1-3.json 11e3a9652a first 8 ans auparavant token-binding.json 11e3a9652a first 8 ans auparavant touch.json 11e3a9652a first 8 ans auparavant transforms2d.json 11e3a9652a first 8 ans auparavant transforms3d.json 11e3a9652a first 8 ans auparavant ttf.json 11e3a9652a first 8 ans auparavant typedarrays.json 11e3a9652a first 8 ans auparavant u2f.json 11e3a9652a first 8 ans auparavant unhandledrejection.json 11e3a9652a first 8 ans auparavant upgradeinsecurerequests.json 11e3a9652a first 8 ans auparavant url.json 11e3a9652a first 8 ans auparavant urlsearchparams.json 11e3a9652a first 8 ans auparavant use-strict.json 11e3a9652a first 8 ans auparavant user-select-none.json 11e3a9652a first 8 ans auparavant user-timing.json 11e3a9652a first 8 ans auparavant variable-fonts.json 11e3a9652a first 8 ans auparavant vibration.json 11e3a9652a first 8 ans auparavant video.json 11e3a9652a first 8 ans auparavant videotracks.json 11e3a9652a first 8 ans auparavant viewport-units.json 11e3a9652a first 8 ans auparavant wai-aria.json 11e3a9652a first 8 ans auparavant wasm.json 11e3a9652a first 8 ans auparavant wav.json 11e3a9652a first 8 ans auparavant wbr-element.json 11e3a9652a first 8 ans auparavant web-animation.json 11e3a9652a first 8 ans auparavant web-app-manifest.json 11e3a9652a first 8 ans auparavant web-bluetooth.json 11e3a9652a first 8 ans auparavant web-share.json 11e3a9652a first 8 ans auparavant webgl.json 11e3a9652a first 8 ans auparavant webgl2.json 11e3a9652a first 8 ans auparavant webm.json 11e3a9652a first 8 ans auparavant webp.json 11e3a9652a first 8 ans auparavant websockets.json 11e3a9652a first 8 ans auparavant webusb.json 11e3a9652a first 8 ans auparavant webvr.json 11e3a9652a first 8 ans auparavant webvtt.json 11e3a9652a first 8 ans auparavant webworkers.json 11e3a9652a first 8 ans auparavant will-change.json 11e3a9652a first 8 ans auparavant woff.json 11e3a9652a first 8 ans auparavant woff2.json 11e3a9652a first 8 ans auparavant word-break.json 11e3a9652a first 8 ans auparavant wordwrap.json 11e3a9652a first 8 ans auparavant x-doc-messaging.json 11e3a9652a first 8 ans auparavant x-frame-options.json 11e3a9652a first 8 ans auparavant xhr2.json 11e3a9652a first 8 ans auparavant xhtml.json 11e3a9652a first 8 ans auparavant xhtmlsmil.json 11e3a9652a first 8 ans auparavant xml-serializer.json 11e3a9652a first 8 ans auparavant tamron - Gogs: Go Git Service

No Description

Action.class.php 14KB

    <?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <liu21st@gmail.com> // +---------------------------------------------------------------------- // $Id: Action.class.php 2832 2012-03-21 01:05:36Z huangdijia $ /** +------------------------------------------------------------------------------ * ThinkPHP RESTFul 控制器基类 抽象类 +------------------------------------------------------------------------------ * @category Think * @package Think * @subpackage Core * @author liu21st <liu21st@gmail.com> * @version $Id: Action.class.php 2832 2012-03-21 01:05:36Z huangdijia $ +------------------------------------------------------------------------------ */ abstract class Action { // 当前Action名称 private $name = ''; // 视图实例 protected $view = null; protected $_method = ''; // 当前请求类型 protected $_type = ''; // 当前资源类型 // 输出类型 protected $_types = array(); /** +---------------------------------------------------------- * 架构函数 取得模板对象实例 +---------------------------------------------------------- * @access public +---------------------------------------------------------- */ public function __construct() { //实例化视图类 $this->view = Think::instance('View'); defined('__EXT__') or define('__EXT__',''); if(''== __EXT__ || false === stripos(C('REST_CONTENT_TYPE_LIST'),__EXT__)) { // 资源类型没有指定或者非法 则用默认资源类型访问 $this->_type = C('REST_DEFAULT_TYPE'); }else{ $this->_type = __EXT__; } // 请求方式检测 $method = strtolower($_SERVER['REQUEST_METHOD']); if(false === stripos(C('REST_METHOD_LIST'),$method)) { // 请求方式非法 则用默认请求方法 $method = C('REST_DEFAULT_METHOD'); } $this->_method = $method; // 允许输出的资源类型 $this->_types = C('REST_OUTPUT_TYPE'); //控制器初始化 if(method_exists($this,'_initialize')) $this->_initialize(); } /** +---------------------------------------------------------- * 获取当前Action名称 +---------------------------------------------------------- * @access protected +---------------------------------------------------------- */ protected function getActionName() { if(empty($this->name)) { // 获取Action名称 $this->name = substr(get_class($this),0,-6); } return $this->name; } /** +---------------------------------------------------------- * 是否AJAX请求 +---------------------------------------------------------- * @access protected +---------------------------------------------------------- * @return bool +---------------------------------------------------------- */ protected function isAjax() { if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) ) { if('xmlhttprequest' == strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])) return true; } if(!empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')])) // 判断Ajax方式提交 return true; return false; } /** +---------------------------------------------------------- * 魔术方法 有不存在的操作的时候执行 +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $method 方法名 * @param array $args 参数 +---------------------------------------------------------- * @return mixed +---------------------------------------------------------- */ public function __call($method,$args) { if( 0 === strcasecmp($method,ACTION_NAME)) { if(method_exists($this,$method.'_'.$this->_method.'_'.$this->_type)) { // RESTFul方法支持 $fun = $method.'_'.$this->_method.'_'.$this->_type; $this->$fun(); }elseif($this->_method == C('REST_DEFAULT_METHOD') && method_exists($this,$method.'_'.$this->_type) ){ $fun = $method.'_'.$this->_type; $this->$fun(); }elseif($this->_type == C('REST_DEFAULT_TYPE') && method_exists($this,$method.'_'.$this->_method) ){ $fun = $method.'_'.$this->_method; $this->$fun(); }elseif(method_exists($this,'_empty')) { // 如果定义了_empty操作 则调用 $this->_empty($method,$args); }elseif(file_exists_case(C('TMPL_FILE_NAME'))){ // 检查是否存在默认模版 如果有直接输出模版 $this->display(); }else{ // 抛出异常 throw_exception(L('_ERROR_ACTION_').ACTION_NAME); } }else{ switch(strtolower($method)) { // 获取变量 支持过滤和默认值 调用方式 $this->_post($key,$filter,$default); case '_get': $input =& $_GET;break; case '_post':$input =& $_POST;break; case '_put': case '_delete':parse_str(file_get_contents('php://input'), $input);break; case '_request': $input =& $_REQUEST;break; case '_session': $input =& $_SESSION;break; case '_cookie': $input =& $_COOKIE;break; case '_server': $input =& $_SERVER;break; default: throw_exception(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_')); } if(isset($input[$args[0]])) { // 取值操作 $data = $input[$args[0]]; $fun = $args[1]?$args[1]:C('DEFAULT_FILTER'); $data = $fun($data); // 参数过滤 }else{ // 变量默认值 $data = isset($args[2])?$args[2]:NULL; } return $data; } } /** +---------------------------------------------------------- * 模板显示 * 调用内置的模板引擎显示方法, +---------------------------------------------------------- * @access protected +---------------------------------------------------------- * @param string $templateFile 指定要调用的模板文件 * 默认为空 由系统自动定位模板文件 * @param string $charset 输出编码 * @param string $contentType 输出类型 +---------------------------------------------------------- * @return void +---------------------------------------------------------- */ protected function display($templateFile='',$charset='',$contentType='') { $this->view->display($templateFile,$charset,$contentType); } /** +---------------------------------------------------------- * 模板变量赋值 +---------------------------------------------------------- * @access protected +---------------------------------------------------------- * @param mixed $name 要显示的模板变量 * @param mixed $value 变量的值 +---------------------------------------------------------- * @return void +---------------------------------------------------------- */ protected function assign($name,$value='') { $this->view->assign($name,$value); } public function __set($name,$value) { $this->view->assign($name,$value); } /** +---------------------------------------------------------- * 设置页面输出的CONTENT_TYPE和编码 +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $type content_type 类型对应的扩展名 * @param string $charset 页面输出编码 +---------------------------------------------------------- * @return void +---------------------------------------------------------- */ public function setContentType($type, $charset=''){ if(headers_sent()) return; if(empty($charset)) $charset = C('DEFAULT_CHARSET'); $type = strtolower($type); if(isset($this->_types[$type])) //过滤content_type header('Content-Type: '.$this->_types[$type].'; charset='.$charset); } /** +---------------------------------------------------------- * 输出返回数据 +---------------------------------------------------------- * @access protected +---------------------------------------------------------- * @param mixed $data 要返回的数据 * @param String $type 返回类型 JSON XML * @param integer $code HTTP状态 +---------------------------------------------------------- * @return void +---------------------------------------------------------- */ protected function response($data,$type='',$code=200) { $this->sendHttpStatus($code); exit($this->encodeData($data,strtolower($type))); } /** +---------------------------------------------------------- * 编码数据 +---------------------------------------------------------- * @access protected +---------------------------------------------------------- * @param mixed $data 要返回的数据 * @param String $type 返回类型 JSON XML +---------------------------------------------------------- * @return void +---------------------------------------------------------- */ protected function encodeData($data,$type='') { if(empty($data)) return ''; if(empty($type)) $type = $this->_type; if('json' == $type) { // 返回JSON数据格式到客户端 包含状态信息 $data = json_encode($data); }elseif('xml' == $type){ // 返回xml格式数据 $data = xml_encode($data); }elseif('php'==$type){ $data = serialize($data); }// 默认直接输出 $this->setContentType($type); header('Content-Length: ' . strlen($data)); return $data; } // 发送Http状态信息 protected function sendHttpStatus($code) { static $_status = array( // Informational 1xx 100 => 'Continue', 101 => 'Switching Protocols', // Success 2xx 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', // Redirection 3xx 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Moved Temporarily ', // 1.1 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', // 306 is deprecated but reserved 307 => 'Temporary Redirect', // Client Error 4xx 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', // Server Error 5xx 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported', 509 => 'Bandwidth Limit Exceeded' ); if(isset($_status[$code])) { header('HTTP/1.1 '.$code.' '.$_status[$code]); // 确保FastCGI模式下正常 header('Status:'.$code.' '.$_status[$code]); } } /** +---------------------------------------------------------- * 析构方法 +---------------------------------------------------------- * @access public +---------------------------------------------------------- */ public function __destruct() { // 保存日志 if(C('LOG_RECORD')) Log::save(); // 执行后续操作 tag('action_end'); } }