本文实例讲述了YII Framework学习之request与response用法。分享给大家供大家参考,具体如下:

YII中提供了CHttpRequest,封装了请求常用的方法。具体代码如下:

class CHttpRequest extends CApplicationComponent
{
  public $enableCookieValidation=false;
  public $enableCsrfValidation=false;
  public $csrfTokenName='YII_CSRF_TOKEN';
  public $csrfCookie;
  private $_requestUri;
  private $_pathInfo;
  private $_scriptFile;
  private $_scriptUrl;
  private $_hostInfo;
  private $_baseUrl;
  private $_cookies;
  private $_preferredLanguage;
  private $_csrfToken;
  private $_deleteParams;
  private $_putParams;
  public function init()
  {
    parent::init();
    $this->normalizeRequest();
  }
  protected function normalizeRequest()
  {
    // normalize request
    if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
    {
      if(isset($_GET))
        $_GET=$this->stripSlashes($_GET);
      if(isset($_POST))
        $_POST=$this->stripSlashes($_POST);
      if(isset($_REQUEST))
        $_REQUEST=$this->stripSlashes($_REQUEST);
      if(isset($_COOKIE))
        $_COOKIE=$this->stripSlashes($_COOKIE);
    }
    if($this->enableCsrfValidation)
      Yii::app()->attachEventHandler('onBeginRequest',array($this,'validateCsrfToken'));
  }
  public function stripSlashes(&$data)
  {
    return is_array($data)?array_map(array($this,'stripSlashes'),$data):stripslashes($data);
  }
  public function getParam($name,$defaultValue=null)
  {
    return isset($_GET[$name]) ? $_GET[$name] : (isset($_POST[$name]) ? $_POST[$name] : $defaultValue);
  }
  public function getQuery($name,$defaultValue=null)
  {
    return isset($_GET[$name]) ? $_GET[$name] : $defaultValue;
  }
  public function getPost($name,$defaultValue=null)
  {
    return isset($_POST[$name]) ? $_POST[$name] : $defaultValue;
  }
  public function getDelete($name,$defaultValue=null)
  {
    if($this->_deleteParams===null)
      $this->_deleteParams=$this->getIsDeleteRequest() ? $this->getRestParams() : array();
    return isset($this->_deleteParams[$name]) ? $this->_deleteParams[$name] : $defaultValue;
  }
  public function getPut($name,$defaultValue=null)
  {
    if($this->_putParams===null)
      $this->_putParams=$this->getIsPutRequest() ? $this->getRestParams() : array();
    return isset($this->_putParams[$name]) ? $this->_putParams[$name] : $defaultValue;
  }
  protected function getRestParams()
  {
    $result=array();
    if(function_exists('mb_parse_str'))
      mb_parse_str(file_get_contents('php://input'), $result);
    else
      parse_str(file_get_contents('php://input'), $result);
    return $result;
  }
  public function getUrl()
  {
    return $this->getRequestUri();
  }
  public function getHostInfo($schema='')
  {
    if($this->_hostInfo===null)
    {
      if($secure=$this->getIsSecureConnection())
        $http='https';
      else
        $http='http';
      if(isset($_SERVER['HTTP_HOST']))
        $this->_hostInfo=$http.'://'.$_SERVER['HTTP_HOST'];
      else
      {
        $this->_hostInfo=$http.'://'.$_SERVER['SERVER_NAME'];
        $port=$secure ? $this->getSecurePort() : $this->getPort();
        if(($port!==80 && !$secure) || ($port!==443 && $secure))
          $this->_hostInfo.=':'.$port;
      }
    }
    if($schema!=='')
    {
      $secure=$this->getIsSecureConnection();
      if($secure && $schema==='https' || !$secure && $schema==='http')
        return $this->_hostInfo;
      $port=$schema==='https' ? $this->getSecurePort() : $this->getPort();
      if($port!==80 && $schema==='http' || $port!==443 && $schema==='https')
        $port=':'.$port;
      else
        $port='';
      $pos=strpos($this->_hostInfo,':');
      return $schema.substr($this->_hostInfo,$pos,strcspn($this->_hostInfo,':',$pos 1) 1).$port;
    }
    else
      return $this->_hostInfo;
  }
  public function setHostInfo($value)
  {
    $this->_hostInfo=rtrim($value,'/');
  }
  public function getBaseUrl($absolute=false)
  {
    if($this->_baseUrl===null)
      $this->_baseUrl=rtrim(dirname($this->getScriptUrl()),'\\/');
    return $absolute ? $this->getHostInfo() . $this->_baseUrl : $this->_baseUrl;
  }
  public function setBaseUrl($value)
  {
    $this->_baseUrl=$value;
  }
  public function getScriptUrl()
  {
    if($this->_scriptUrl===null)
    {
      $scriptName=basename($_SERVER['SCRIPT_FILENAME']);
      if(basename($_SERVER['SCRIPT_NAME'])===$scriptName)
        $this->_scriptUrl=$_SERVER['SCRIPT_NAME'];
      else if(basename($_SERVER['PHP_SELF'])===$scriptName)
        $this->_scriptUrl=$_SERVER['PHP_SELF'];
      else if(isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME'])===$scriptName)
        $this->_scriptUrl=$_SERVER['ORIG_SCRIPT_NAME'];
      else if(($pos=strpos($_SERVER['PHP_SELF'],'/'.$scriptName))!==false)
        $this->_scriptUrl=substr($_SERVER['SCRIPT_NAME'],0,$pos).'/'.$scriptName;
      else if(isset($_SERVER['DOCUMENT_ROOT']) && strpos($_SERVER['SCRIPT_FILENAME'],$_SERVER['DOCUMENT_ROOT'])===0)
        $this->_scriptUrl=str_replace('\\','/',str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER['SCRIPT_FILENAME']));
      else
        throw new CException(Yii::t('yii','CHttpRequest is unable to determine the entry script URL.'));
    }
    return $this->_scriptUrl;
  }
  public function setScriptUrl($value)
  {
    $this->_scriptUrl='/'.trim($value,'/');
  }
  public function getPathInfo()
  {
    if($this->_pathInfo===null)
    {
      $pathInfo=$this->getRequestUri();
      if(($pos=strpos($pathInfo,'?'))!==false)
        $pathInfo=substr($pathInfo,0,$pos);
      $pathInfo=urldecode($pathInfo);
      $scriptUrl=$this->getScriptUrl();
      $baseUrl=$this->getBaseUrl();
      if(strpos($pathInfo,$scriptUrl)===0)
        $pathInfo=substr($pathInfo,strlen($scriptUrl));
      else if($baseUrl==='' || strpos($pathInfo,$baseUrl)===0)
        $pathInfo=substr($pathInfo,strlen($baseUrl));
      else if(strpos($_SERVER['PHP_SELF'],$scriptUrl)===0)
        $pathInfo=substr($_SERVER['PHP_SELF'],strlen($scriptUrl));
      else
        throw new CException(Yii::t('yii','CHttpRequest is unable to determine the path info of the request.'));
      $this->_pathInfo=trim($pathInfo,'/');
    }
    return $this->_pathInfo;
  }
  public function getRequestUri()
  {
    if($this->_requestUri===null)
    {
      if(isset($_SERVER['HTTP_X_REWRITE_URL'])) // IIS
        $this->_requestUri=$_SERVER['HTTP_X_REWRITE_URL'];
      else if(isset($_SERVER['REQUEST_URI']))
      {
        $this->_requestUri=$_SERVER['REQUEST_URI'];
        if(isset($_SERVER['HTTP_HOST']))
        {
          if(strpos($this->_requestUri,$_SERVER['HTTP_HOST'])!==false)
            $this->_requestUri=preg_replace('/^\w :\/\/[^\/] /','',$this->_requestUri);
        }
        else
          $this->_requestUri=preg_replace('/^(http|https):\/\/[^\/] /i','',$this->_requestUri);
      }
      else if(isset($_SERVER['ORIG_PATH_INFO'])) // IIS 5.0 CGI
      {
        $this->_requestUri=$_SERVER['ORIG_PATH_INFO'];
        if(!empty($_SERVER['QUERY_STRING']))
          $this->_requestUri.='?'.$_SERVER['QUERY_STRING'];
      }
      else
        throw new CException(Yii::t('yii','CHttpRequest is unable to determine the request URI.'));
    }
    return $this->_requestUri;
  }
  public function getQueryString()
  {
    return isset($_SERVER['QUERY_STRING'])?$_SERVER['QUERY_STRING']:'';
  }
  public function getIsSecureConnection()
  {
    return isset($_SERVER['HTTPS']) && !strcasecmp($_SERVER['HTTPS'],'on');
  }
  public function getRequestType()
  {
    return strtoupper(isset($_SERVER['REQUEST_METHOD'])?$_SERVER['REQUEST_METHOD']:'GET');
  }
  public function getIsPostRequest()
  {
    return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'POST');
  }
  public function getIsDeleteRequest()
  {
    return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'DELETE');
  }
  public function getIsPutRequest()
  {
    return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'PUT');
  }
  public function getIsAjaxRequest()
  {
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';
  }
  public function getServerName()
  {
    return $_SERVER['SERVER_NAME'];
  }
  public function getServerPort()
  {
    return $_SERVER['SERVER_PORT'];
  }
  public function getUrlReferrer()
  {
    return isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:null;
  }
  public function getUserAgent()
  {
    return isset($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:null;
  }
  public function getUserHostAddress()
  {
    return isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'127.0.0.1';
  }
  public function getUserHost()
  {
    return isset($_SERVER['REMOTE_HOST'])?$_SERVER['REMOTE_HOST']:null;
  }
  public function getScriptFile()
  {
    if($this->_scriptFile!==null)
      return $this->_scriptFile;
    else
      return $this->_scriptFile=realpath($_SERVER['SCRIPT_FILENAME']);
  }
  public function getBrowser($userAgent=null)
  {
    return get_browser($userAgent,true);
  }
  public function getAcceptTypes()
  {
    return isset($_SERVER['HTTP_ACCEPT'])?$_SERVER['HTTP_ACCEPT']:null;
  }
  private $_port;
  public function getPort()
  {
    if($this->_port===null)
      $this->_port=!$this->getIsSecureConnection() && isset($_SERVER['SERVER_PORT']) ? (int)$_SERVER['SERVER_PORT'] : 80;
    return $this->_port;
  }
  public function setPort($value)
  {
    $this->_port=(int)$value;
    $this->_hostInfo=null;
  }
  private $_securePort;
  public function getSecurePort()
  {
    if($this->_securePort===null)
      $this->_securePort=$this->getIsSecureConnection() && isset($_SERVER['SERVER_PORT']) ? (int)$_SERVER['SERVER_PORT'] : 443;
    return $this->_securePort;
  }
  public function setSecurePort($value)
  {
    $this->_securePort=(int)$value;
    $this->_hostInfo=null;
  }
  public function getCookies()
  {
    if($this->_cookies!==null)
      return $this->_cookies;
    else
      return $this->_cookies=new CCookieCollection($this);
  }
  public function redirect($url,$terminate=true,$statusCode=302)
  {
    if(strpos($url,'/')===0)
      $url=$this->getHostInfo().$url;
    header('Location: '.$url, true, $statusCode);
    if($terminate)
      Yii::app()->end();
  }
  public function getPreferredLanguage()
  {
    if($this->_preferredLanguage===null)
    {
      if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && ($n=preg_match_all('/([\w\-_] )\s*(;\s*q\s*=\s*(\d*\.\d*))?/',$_SERVER['HTTP_ACCEPT_LANGUAGE'],$matches))>0)
      {
        $languages=array();
        for($i=0;$i<$n;  $i)
          $languages[$matches[1][$i]]=empty($matches[3][$i]) ? 1.0 : floatval($matches[3][$i]);
        arsort($languages);
        foreach($languages as $language=>$pref)
          return $this->_preferredLanguage=CLocale::getCanonicalID($language);
      }
      return $this->_preferredLanguage=false;
    }
    return $this->_preferredLanguage;
  }
  public function sendFile($fileName,$content,$mimeType=null,$terminate=true)
  {
    if($mimeType===null)
    {
      if(($mimeType=CFileHelper::getMimeTypeByExtension($fileName))===null)
        $mimeType='text/plain';
    }
    header('Pragma: public');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header("Content-type: $mimeType");
    if(ini_get("output_handler")=='')
      header('Content-Length: '.(function_exists('mb_strlen') ? mb_strlen($content,'8bit') : strlen($content)));
    header("Content-Disposition: attachment; filename=\"$fileName\"");
    header('Content-Transfer-Encoding: binary');
    if($terminate)
    {
      // clean up the application first because the file downloading could take long time
      // which may cause timeout of some resources (such as DB connection)
      Yii::app()->end(0,false);
      echo $content;
      exit(0);
    }
    else
      echo $content;
  }
  public function xSendFile($filePath, $options=array())
  {
    if(!is_file($filePath))
      return false;
    if(!isset($options['saveName']))
      $options['saveName']=basename($filePath);
    if(!isset($options['mimeType']))
    {
      if(($options['mimeType']=CFileHelper::getMimeTypeByExtension($filePath))===null)
        $options['mimeType']='text/plain';
    }
    if(!isset($options['xHeader']))
      $options['xHeader']='X-Sendfile';
    header('Content-type: '.$options['mimeType']);
    header('Content-Disposition: attachment; filename="'.$options['saveName'].'"');
    header(trim($options['xHeader']).': '.$filePath);
    if(!isset($options['terminate']) || $options['terminate'])
      Yii::app()->end();
    return true;
  }
  public function getCsrfToken()
  {
    if($this->_csrfToken===null)
    {
      $cookie=$this->getCookies()->itemAt($this->csrfTokenName);
      if(!$cookie || ($this->_csrfToken=$cookie->value)==null)
      {
        $cookie=$this->createCsrfCookie();
        $this->_csrfToken=$cookie->value;
        $this->getCookies()->add($cookie->name,$cookie);
      }
    }
    return $this->_csrfToken;
  }
  protected function createCsrfCookie()
  {
    $cookie=new CHttpCookie($this->csrfTokenName,sha1(uniqid(mt_rand(),true)));
    if(is_array($this->csrfCookie))
    {
      foreach($this->csrfCookie as $name=>$value)
        $cookie->$name=$value;
    }
    return $cookie;
  }
  public function validateCsrfToken($event)
  {
    if($this->getIsPostRequest())
    {
      // only validate POST requests
      $cookies=$this->getCookies();
      if($cookies->contains($this->csrfTokenName) && isset($_POST[$this->csrfTokenName]))
      {
        $tokenFromCookie=$cookies->itemAt($this->csrfTokenName)->value;
        $tokenFromPost=$_POST[$this->csrfTokenName];
        $valid=$tokenFromCookie===$tokenFromPost;
      }
      else
        $valid=false;
      if(!$valid)
        throw new CHttpException(400,Yii::t('yii','The CSRF token could not be verified.'));
    }
  }
}

request操作的相关方法,一目了然。

public function init()
{
  parent::init();
  $this->normalizeRequest();
}
protected function normalizeRequest()
{
  // normalize request
  if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
  {
    if(isset($_GET))
      $_GET=$this->stripSlashes($_GET);
    if(isset($_POST))
      $_POST=$this->stripSlashes($_POST);
    if(isset($_REQUEST))
      $_REQUEST=$this->stripSlashes($_REQUEST);
    if(isset($_COOKIE))
      $_COOKIE=$this->stripSlashes($_COOKIE);
  }
  if($this->enableCsrfValidation)
    Yii::app()->attachEventHandler('onBeginRequest',array($this,'validateCsrfToken'));
}
public function stripSlashes(&$data)
{
  return is_array($data)?array_map(array($this,'stripSlashes'),$data):stripslashes($data);
}

可以看到yii对$_GET\$_POST\$_REQUEST\$_COOKIE进行了必要的过滤处理,所以可以放心的使用数据。

常用的有如下方法:

获取get参数

public function getParam($name,$defaultValue=null)

获取get参数

public function getQuery($name,$defaultValue=null)

获取post数据

public function getPost($name,$defaultValue=null)

获取请求的url

public function getUrl()

获取主机信息

public function getHostInfo($schema='')

设置

public function setHostInfo($value)

获取根目录

public function getBaseUrl($absolute=false)

获取当前url

public function getScriptUrl()

获取请求的url

public function getRequestUri()

获取querystring

public function getQueryString()

判断是否是https

public function getIsSecureConnection()

获取请求类型

public function getRequestType()

是否是post请求

public function getIsPostRequest()

是否是ajax请求

public function getIsAjaxRequest()

获取服务器名称

public function getServerName()

获取服务端口

public function getServerPort()

获取引用路径

public function getUrlReferrer()

获取用户ip地址

public function getUserHostAddress()

获取用户主机名称

public function getUserHost()

获取执行脚本名称

public function getScriptFile()

获取cookie

public function getCookies()

重定向

public function redirect($url,$terminate=true,$statusCode=302)

设置下载文件头

public function sendFile($fileName,$content,$mimeType=null,$terminate=true)
{
if($mimeType===null)
{
if(($mimeType=CFileHelper::getMimeTypeByExtension($fileName))===null)
$mimeType='text/plain';
}
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-type: $mimeType");
if(ini_get("output_handler")=='')
header('Content-Length: '.(function_exists('mb_strlen') ? mb_strlen($content,'8bit') : strlen($content)));
header("Content-Disposition: attachment; filename=\"$fileName\"");
header('Content-Transfer-Encoding: binary');
if($terminate)
{
// clean up the application first because the file downloading could take long time
// which may cause timeout of some resources (such as DB connection)
Yii::app()->end(0,false);
echo $content;
exit(0);
}
else
echo $content;
}
public function xSendFile($filePath, $options=array())
{
if(!is_file($filePath))
return false;
if(!isset($options['saveName']))
$options['saveName']=basename($filePath);
if(!isset($options['mimeType']))
{
if(($options['mimeType']=CFileHelper::getMimeTypeByExtension($filePath))===null)
$options['mimeType']='text/plain';
}
if(!isset($options['xHeader']))
$options['xHeader']='X-Sendfile';
header('Content-type: '.$options['mimeType']);
header('Content-Disposition: attachment; filename="'.$options['saveName'].'"');
header(trim($options['xHeader']).': '.$filePath);
if(!isset($options['terminate']) || $options['terminate'])
Yii::app()->end();
return true;
}

为了防止csrf,yii提供了相应的方法

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
《CSRF的攻击方式详解 黑客必备知识》

public function getCsrfToken()
{
if($this->_csrfToken===null)
{
$cookie=$this->getCookies()->itemAt($this->csrfTokenName);
if(!$cookie || ($this->_csrfToken=$cookie->value)==null)
{
$cookie=$this->createCsrfCookie();
$this->_csrfToken=$cookie->value;
$this->getCookies()->add($cookie->name,$cookie);
}
}
return $this->_csrfToken;
}
protected function createCsrfCookie()
{
$cookie=new CHttpCookie($this->csrfTokenName,sha1(uniqid(mt_rand(),true)));
if(is_array($this->csrfCookie))
{
foreach($this->csrfCookie as $name=>$value)
$cookie->$name=$value;
}
return $cookie;
}
public function validateCsrfToken($event)
{
if($this->getIsPostRequest())
{
// only validate POST requests
$cookies=$this->getCookies();
if($cookies->contains($this->csrfTokenName) && isset($_POST[$this->csrfTokenName]))
{
$tokenFromCookie=$cookies->itemAt($this->csrfTokenName)->value;
$tokenFromPost=$_POST[$this->csrfTokenName];
$valid=$tokenFromCookie===$tokenFromPost;
}
else
$valid=false;
if(!$valid)
throw new CHttpException(400,Yii::t('yii','The CSRF token could not be verified.'));
}
}

对于$_GET的使用,不仅仅可以使用$_GET和以上提供的相关方法,在action中,可以绑定到action的方法参数。

http://www.yiiframework.com/doc/guide/1.1/zh_cn/basics.controller

这里就一并罗列官方给出的说明。

从版本 1.1.4 开始,Yii 提供了对自动动作参数绑定的支持。 就是说,控制器动作可以定义命名的参数,参数的值将由 Yii 自动从 $_GET 填充。

为了详细说明此功能,假设我们需要为 PostController 写一个 create 动作。此动作需要两个参数:

category: 一个整数,代表帖子(post)要发表在的那个分类的ID。
language: 一个字符串,代表帖子所使用的语言代码。
从 $_GET 中提取参数时,我们可以不再下面这种无聊的代码了:

class PostController extends CController
{
  public function actionCreate()
  {
    if(isset($_GET['category']))
      $category=(int)$_GET['category'];
    else
      throw new CHttpException(404,'invalid request');
    if(isset($_GET['language']))
      $language=$_GET['language'];
    else
      $language='en';
    // ... fun code starts here ...
  }
}

现在使用动作参数功能,我们可以更轻松的完成任务:

class PostController extends CController
{
  public function actionCreate($category, $language='en')
  {
    $category=(int)$category;
    // ... fun code starts here ...
  }
}

注意我们在动作方法 actionCreate 中添加了两个参数。 这些参数的名字必须和我们想要从 $_GET 中提取的名字一致。 当用户没有在请求中指定 $language 参数时,这个参数会使用默认值 en 。 由于 $category 没有默认值,如果用户没有在 $_GET 中提供 category 参数, 将会自动抛出一个 CHttpException (错误代码 400) 异常。 Starting from version 1.1.5, Yii also supports array type detection for action parameters. This is done by PHP type hinting using the syntax like the following:

class PostController extends CController
{
  public function actionCreate(array $categories)
  {
    // Yii will make sure $categories be an array
  }
}

That is, we add the keyword array in front of $categories in the method parameter declaration. By doing so, if $_GET['categories'] is a simple string, it will be converted into an array consisting of that string.

Note: If a parameter is declared without the array type hint, it means the parameter must be a scalar (i.e., not an array). In this case, passing in an array parameter via $_GET would cause an HTTP exception.

request的使用你只要保持和以前在php中的使用方式一样,在yii中是不会出错的

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

YII Framework学习之request与response用法(基于CHttpRequest响应)的更多相关文章

  1. 关于h5中的fetch方法解读(小结)

    这篇文章主要介绍了关于h5中的fetch方法解读(小结),fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,有兴趣的可以了解一下

  2. ios – 使用NSURLSession获取JSON数据

    我试图从谷歌距离api使用NSURLSession获取数据,但如下所示,当我打印响应和数据时,我得到的结果为NULL.可能是什么问题?

  3. ios – 黑客入侵MFMessageComposeViewController

    2)如何找出实际的messageSend方法及其实现的类?

  4. ios – 在设备上构建和运行时,仅将嵌入式框架与其他动态框架链接失败

    TL;博士将您的嵌入式框架与其他框架链接,并且不将其他框架与您的应用程序链接,导致Build&在设备上运行.描述:建立:我的设置非常简单(Swift2.3&XcodeXcode8.0;Build版本8S162m):>使用Carthage(0.17.2)我用xcodebuild8.0和TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3carthagebui

  5. ios – Xcode 7.1 PrototypeTools链接器错误(仅限模拟器)

    我正在尝试使用Xcode7.1在iOS模拟器中运行我的应用程序,但我收到链接器错误.这是错误:clang:错误:链接器命令失败,退出代码为1这似乎是一个新问题,因为我在升级到新的Xcode之前没有它.我在Google上搜索过,但是这个问题几乎没有相关主题.有趣的是,该应用程序在设备上运行良好.我已经尝试重置模拟器并再次清洁/建造,但两者都没有奏效.有没有其他人遇到过这个问题,你能提供什么建议吗?

  6. ios – 错误域= com.alamofire.error.serialization.response代码= -1011“请求失败:禁止

    任何人都可以帮我解决以下错误–>在AFNetworking2.5中使用“删除”方法时出错解决方法我发现,如果我的手机时钟不同步……它不允许我更新…也许检查你的手机设置到正确的时间“自动区”,看看是否有效…

  7. iOS网页/原生应用Facebook登录弹出 – 失败?

    如果我重新启动app/web-app,用户将自动登录,并重定向到成功页面.我认为是导致问题的原因当您在Firefox/Chrome/Safari浏览器中运行网页时,Facebook登录对话框会弹出一个弹出窗口或另一个选项卡.我相信这是这个弹出页面的一个问题,以及当成功登录时Javascript如何与自身通信.window.close的东西没有返回的根页面…失败的解决方法由于应用程序挂在前面提到的URL上,我决定在shouldStartLoadWithRequest(…)中添加if语句以强制UIWebvie

  8. ios – iPhone崩溃日志不能正确地符号化并且是双重间隔的

    任何建议超过欢迎.谢谢.解决方法当这件事发生在我身上时,它只是我通过电子邮件收到的日志.如果我记得,至少有一些是在.msg文件中,我不得不把它们拿出来.它可能是Exchange编码更改.如果你显示不可见的字符,你可能会看到每个字符之间的东西.您可以找到并替换它们以删除它们或更改编辑器中的编码.

  9. 如何使用iOS上的BluetoothManager.framework私有API发送和接收数据

    这些天我正在开展一个项目,我们需要将非MFI蓝牙设备连接到iPhone,并且该设备不支持成为BLE外围设备客户端,因此我们必须在经典蓝牙上执行此操作.我设法使用BluetoothManager.framework与demoprojectBeeTee的指南配对并将设备连接到iPhone但我不知道如何发送和recv数据,我在类转储标头中找不到API.似乎答案在于这三个结构:BTAccessoryMan

  10. ios – Watchkit新会话不起作用

    我的手表扩展中有两个视图控制器.每当我打电话时我只得到第一个视图控制器的响应,并在第二个viewcontroller中得到错误WCSession在app和watch扩展中启动.任何建议?

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部