phalconplus Documentation v1.2.0
Class PhalconPlus Http

NonPsrRequest

    // request)
    {
        let this->attributes = request->getAttributes() ?: [];
        let this->cookies    = request->getCookieParams() ?: [];
        let this->headers    = request->getHeaders() ?: [];
        let this->_rawBody   = request->getBody()->__toString();
        
        var posts, gets, cookies;
        let posts = request->getParsedBody() ?: [];
        let gets  = request->getQueryParams() ?: [];
        let cookies = request->getCookieParams() ?: [];
        // Global variables
        var k, v;
        // POST
        for k, v in  posts {
            let _POST[k] = v;
        }
        // GET
        for k, v in gets {
            let _GET[k] = v;
        }

        // SERVER
        for k, v in request->getServerParams() {
            let _SERVER[k] = v;
        }
        for k, v in this->headers {
            let k = strtoupper(str_replace("-", "_", k));
            let _SERVER["HTTP_".k] = is_array(v) ? reset(v) : v;
        }

        // error_log("IN NoPsrRequest: " . self::getRequestTarget(request));
        let _SERVER["REQUEST_URI"] = self::getRequestTarget(request);
        let _SERVER["REQUEST_METHOD"] = request->getMethod();

        // COOKIE
        for k, v in cookies {
            let _COOKIE[k] = v;
        }
        // 设置SessionId
        if !empty this->cookies {
            if isset this->cookies[session_name()] {
                session_id(this->cookies[session_name()]);
            }
        }
        this->mapFiles(request->getUploadedFiles());
        var prefix, input;
        for prefix, input in this->files {
            let _FILES[prefix] = input;
        }

        let this->psrRequest = request;
    }

    protected static function getRequestTarget( request)
    {
        var target = request->getUri()->getPath();
        if (target == "") {
            let target = "/";
        }
        if (request->getUri()->getQuery() != "") {
            let target .= "?" . request->getUri()->getQuery();
        }
        return target;
    }
 
    private function mapFiles(array uploads)
    {
        var file;
        for file in uploads {
            if is_array(file) {
                this->mapFiles(file);
            } elseif file instanceof UploadedFileInterface {
                var tmpname;
                let tmpname = tempnam(sys_get_temp_dir(), "upload");
             
                if (UPLOAD_ERR_OK == file->getError()) {
                    file_put_contents(tmpname, (string) file->getStream());
                }
                
                let this->files[] = [
                    "error"    : file->getError(),
                    "name"     : file->getClientFilename(),
                    "size"     : file->getSize(),
                    "tmp_name" : tmpname,
                    "type"     : file->getClientMediaType()
                ];
            }
        }
    }

    public function removeTmpFiles()
    {
        var item, tmp;
        for item in this->files {
            if fetch tmp, item["tmp_name"] {
                if file_exists(tmp) {
                    unlink(tmp);
                }
            }
        }
    }

    public function getScheme() -> string
    {
        return this->psrRequest->getUri()->getScheme();
    }

    /**
    * Checks whether request has been made using ajax
    */
    public function isAjax() -> boolean
    {
        return isset this->headers["HTTP_X_REQUESTED_WITH"] && this->headers["HTTP_X_REQUESTED_WITH"] === "XMLHttpRequest";
    }

    /**
    * Checks whether request has been made using SOAP
    */
    public function isSoap() -> boolean
    {
        var contentType;
        if isset this->headers["HTTP_SOAPACTION"] {
            return true;
        } else {
            let contentType = this->getContentType();
            if !empty contentType {
                return memstr(contentType, "application/soap+xml");
            }
        }
        return false;
    }
 

    public function getHttpHost() -> string
    {
        return this->psrRequest->getUri()->getHost();
    }

    public function getPort() -> int
    {
        return this->psrRequest->getUri()->getPort();
    }

    public function getHeaders() -> array
    {
        return this->headers;
    }

    public function getContentType() -> string | null
    {
    return  this->psrRequest->getHeaderLine("Content-Type");
    }

}