ホームページ >PHPフレームワーク >ThinkPHP >tpフレームワーク開発の概要

tpフレームワーク開発の概要

步履不停
步履不停オリジナル
2019-06-21 14:37:563876ブラウズ

tpフレームワーク開発の概要

tp3.2 ドキュメント http://www.php.cn/xiazai/shouce/31

大文字の使用

  • 関数はコントローラーのインスタンス化に使用されます
  • 形式: [resource://][module/]controllerA($name,$layer='',$level =' ')
    @param string $name 资源地址
    @param string $layer 控制层名称
    @param integer $level 控制器层次
    @return Controller|false

##B 特定の動作を実行します B($name,$tag='',&$params=NULL)

@param string $name 行为名称
@param string $tag 标签名称(行为类无需传入)
@param Mixed $params传入的参数 @return void
これは、ビヘイビアーとともに登場する新しい関数です。B('app_begin'); などの特定のビヘイビアーを実行できます。

プロジェクトの開始前に、このビヘイビアで定義されたすべての関数を実行します。 2 つのパラメータをサポートしており、2 番目のパラメータは配列を受け入れる必要性をサポートしています。

例:

B('app_begin',array("name"=>"tdweb","time"=>time()));

C 構成パラメータ C( $name= null,$value=null,$default=null)

@paramstring|array $name 配置变量
@param mixed $value 配置值
@param mixed $default 默认值
@return mixed
値の取得:

    すべての設定の取得: C(); はパラメータを渡さない場合、すべての設定を含む配列を返します。
  • 指定された構成を取得: C('URL_MODEL') これにより、URL_MODEL の構成情報を取得できます。
  • 指定された 2 次元配列の構成を取得: C("array.name")このようにして、配列を返すことができます。 配列の下のキーは、名前に対応する値です。
値を設定します。

    値を2 次元配列 C("array.name", "value")、原理は上記と同じ (array.name の値を取得)、次の値が値になります。
  • バッチ代入:
$test=array("URL_MODEL"=>1,"THIN_MODEL"=>true");
C($test);  这样直接将数组里的值赋值了
  • 値を割り当てるかどうかの判断:

    C("?URL_MODEL")这样前边加个"?",如果已经赋值,则返回true
    ここで設定値を変更していますが、変更されるのはこのページのみであり、次のページでは機能しません。 # 永続的に変更したい場合は、F関数と連携してconfigに設定ファイルを書き込む必要がありますが、PHPで可能です。



  • D 関数は、モデル クラス形式 [resource://][module/]model D($name='') をインスタンス化するために使用されます。 ,$layer='')
    @param string $name 资源地址
    @param string $layer 模型层名称
    @return Model

    D 関数には 2 つの利点があります。

    まず、このモデルが以前にインスタンス化されている場合は、今後インスタンス化されなくなり、リソースが節約されます。
    • 2 つ目はデバッグを容易にするためで、このモデルが存在しない場合は TP 例外がスローされるため、非常にユーザーフレンドリーです。
    • このプロジェクトのモデルに直接アクセスしたい場合は D("モデル名"); で大丈夫ですが、プロジェクトをまたいでアクセスする場合は D("モデル名", "プロジェクト名");


    EThrow 例外処理E($msg, $code=0)
    @param string $msg异常消息
    @param integer $code 异常代码默认为0
    @return void


    F ファイル データの高速読み取りと保存 単純なタイプのデータ文字列と配列の場合 F($name, $value='',$path=DATA_PATH)
    @param string $name 缓存名称
    @param mixed $value 缓存值
    @param string $path 缓存路径
    @return mixed

    データをすばやく保存します: F("mydata","Here is保存するデータ」)、プロジェクトの Data ディレクトリに mydata.php という名前のファイルが保存され、その内容が関数の 2 番目のパラメーターになります。
    • 保存時間を指定: F("mydata","保存するデータはこちらです","60") 次回のアクセスが 60 秒を超えるとキャッシュ ファイルが削除されます。
    • #保存ディレクトリを指定:F("mydata","保存するデータはここです","60",DATA_PATH) なのでデータディレクトリに保存するように指定されています。
    • キャッシュをすぐに削除します: F("mydata",null)、2 番目のパラメーターは null 値を渡すため、mydate のキャッシュが削除されます
    • キャッシュ データを読み取ります: F("mydata")、キャッシュの読み取り
    G 記録と統計時間 (マイクロ秒) とメモリ使用量
    G($start,$end='',$dec=4)
    使用方法:

    G('begin'); // 记录开始标记位 // ... 区间运行代码
    G('end'); // 记录结束标签位
    echo G('begin','end',6); //统计区间运行时间精确到小数后6位
    echo G('begin','end','m'); // 统计区间内存使用情况 如果end标记位没有定义,则会自动以当前作为标记位
    その中で、統計的なメモリ使用量が必要です MEMORY_LIMIT_ON は、定数が true の場合にのみ有効です

    @param string $start 开始标签
    @param string $end 结束标签
    @paraminteger|string $dec小数位或者m
    @return mixed

    フィルタリングとデフォルト値をサポートする入力パラメータを取得します
    I($name,$default='',$filter=null)
    使用方法:

    I('id',0); //获取id参数自动判断get或者post
    I('post.name','','htmlspecialchar s'); //获取$_POST['name']
    I('get.'); //获取$_GET

    L() 言語定義を取得および設定します (大文字と小文字は区別されません)
    L($name=null,$value=null)
    @paramstring|array $name 语言变量
    @param mixed $value 语言值或者变量
    @return mixed
    言語定義関数、L("intro") は定義された言語を取得しますas intro, l("intro" , " Introduction") intro に値を割り当てます

    M 関数は、モデル ファイルなしでモデルをインスタンス化するために使用されます
    M($name='',$tablePrefix='',$connection='')
    @param string $name Model名称支持指定基础模型例如MongoModel:User
    @param string $tablePrefix表前缀
    @param mixed $connection  数据库连接信息
    @return Model

    N統計データの設定と取得
    N($key,$step=0,$save=false)
    利用方法:

    N('db',1); // 记录数据库操作次数
    N('read',1); // 记录读取次数
    echo N('db'); // 获取当前页面数据库的所有操作次数
    echo N('read'); // 获取当前页面读取次数
    @param string $key 标识位置
    @param integer $step 步进值
    @return mixed

    ##R リモートコールコントローラの操作方法 URLパラメータ形式[resource://] [Module/]Controller/Operation
    R($url,$vars=array(),$layer='')
    @param string $url调用地址
    @paramstring|array $vars调用参数支持字符串和数组
    @param string $layer 要调用的控制层名称
    @return mixed

    テンプレート ファイル形式を取得する resource://module@Theme/Controller/Operation
    T($template='',$layer='')
    @param string $name 模版资源地址
    @param string $layer 视图层(目录)名称
    @return string

    U()URL アセンブリはさまざまな URL パターンをサポートしています
    U($url='',$vars='',$suffix=true,$domain=false)
    @param string $url URL表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...'
    @paramstring|array $vars传入的参数,支持数组和字符串
    @param string $suffix 伪静态后缀,默认为true表示获取配置值
    @paramboolean $domain 是否显示域名
    @return string

    使用法:

    • 取得当前模块的Action地址 :U("/nowMethod");
    • 取得当前模块的Action地址,并传递参数:U("/nowMethod?params=test");
    • (如果不习惯上边那种方式,可以使用U("/nowMethod",array("params"=>"test");这样的数组方式传递参数,效果是一样的)
    • 访问其他模块的方法:U("Other/otherMethod"),这样就是访问Other模块下的otherMethod方法

    跨项目访问:

    U("appname://Other/otherMethod");

    使用路由访问:

    U("appName://routeName@moduleName/actionName?params");

    另外,如果想直接跳转,那么就在第二个参数写1

    U("/nowMethod",1)

    这样就直接调转到指定URL了


    W渲染输出Widget

    W($name,$data=array())
    @param string $name Widget名称
    @param array $data 传入的参数
    @return void

    S缓存管理

    S($name,$value='',$options=null)
    @param mixed $name 缓存名称,如果为数组表示进行缓存设置
    @param mixed $value 缓存值
    @param mixed $options 缓存参数
    @return mixed
    • 全局缓存读写函数,和C类似,不过是直接写成文件,写在Temp目录下,不过在缓存有一点需要注意,
    • 如果缓存名称是aaa,那么缓存生成的文件名称就是md5("aaa")的值。

    技术

    防止xss攻击

    简单的防止

    当网站不涉及复杂的用户交互时,可以对用户所有提交的文本进行htmlspecialchars函数处理。

    • 版本为:3.2
    • 步骤:
      • 一:在项目配置文件中添加配置: 'DEFAULT_FILTER' => 'htmlspecialchars', //默认过滤函数
      • 二: 使用框架带的I方法获取来自用户提交的数据;
    • 例子

      • M('Member')->save(array('content'=>I('post.content')));

    对COOKIE进行IP绑定

    • cookie的信息一但被别人通过XSS攻击获取后也一样等同于把自己的帐号密码给了别人。
    • 对cookie进行IP绑定,(当然也可以获取用户客户端更多的其它信息进行同时绑定)可以根据用户的IP来判断这个cookie是不是来原始授权用户。

    示例

    • 用户设置了自动登录时保存自动登录信息:
      $auto=I('post.auto');//用户设置了自动登录
      if(!empty($auto)){
      cookie('auto',encrypt(serialize($data)));//将登录信息保存到cookie,其中$data里含有加密后的帐号,密码,和用户的IP,这里的cookie已在全局中设置过期日期为一周
      }
    • 用户关闭浏览器再次访问网站时,进行自动登录
      if (!is_login()) {//是否未登录状态?
      $auth=cookie('auto');
          if(!empty($auth)){//是否未有自动登录cookie?
              $data=unserialize(decrypt($auth));
                  if(!empty($data) && !empty($data['username']) && !empty($data['password']) && !empty($data['last_login_ip'])){
                      $user=M('Member')->where(array('username'=>$data['username'],'password'=>$data['password']))->find();
                          if(!empty($user['id'])&&($user['last_login_ip']==get_client_ip())){//cookie帐号密码是否有效?//IP来源是否相同?
                              login_session($user['id'], $user['username'], $data['last_login_ip']);//用户自动登录成功
                          }
                  }
          }
      }
    • 优点:大多数场景下可使被XSS攻击盗取的cookie失效。
    • 缺点:由于IP存在多台电脑共用的可能,对绑定做不到十分精细

    为COOKIE添加httponly配置

    可以保证cookie只在http请求中被传输,而不被页面中的脚本获取,现市面上绝大多数浏览器已经支持。

    HTML5的新特性:

    <iframe src="http://alibaba.com" sandbox>

    为iframe的增加的sandbox属性,可以防止不信任的Web页面执行某些操作.相信这个方法以后会被广泛使用。

    富文本过滤

    5.0文档 

    http://www.php.cn/xiazai/shouce/32

    以上がtpフレームワーク開発の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。