PHP day4 请求request参数获取和input助手函数

来源:互联网 发布:学统计跟大数据 编辑:程序博客网 时间:2024/05/17 06:01

1.    在apache 的   httpd.conf  中  更改

   LoadModule rewrite_module modules/mod_rewrite.so   放开注释

  apache的AllowOverride以及Options使用详解

通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置
 
AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件,如果设置为All,那么所有在.htaccess文件里有的指令都将被重写。对于AllowOverride,还可以对它指定如下一些能被重写的指令类型. 

通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override ,即 

复制代码代码如下:

<Directory /> 
AllowOverride None 
</Directory> 


在 AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 ".htaccess" 作用域的指令都允许出现在 .htaccess 文件中。 

而对于 URL rewrite 来说,至少需要把目录设置为 

复制代码代码如下:

< Directory /myblogroot/> 
AllowOverride FileInfo 
< /Directory> 


2.在要支持url rewirte的目录启用 Options FollowSymLinks和AllowOverride All 

复制代码代码如下:

Alias /php "c:/web/php/" 
<Directory "c:/web/php/"> 
Options Indexes FollowSymLinks 
AllowOverride All 
Order allow,deny 
Allow from all 
</Directory> 


这样通过http://localhost:8080/php/访问时,/php/和其下面的子目录将支持url rewrite

1  AuthConfig  允许使用所有的权限指令,他们包括AuthDBMGroupFile AuthDBMUserFile  AuthGroupFile  AuthName AuthTypeAuthUserFile和Require

2  FileInfo    允许使用文件控制类型的指令。它们包括AddEncoding AddLanguage  AddType  DEfaultType ErrorDocument LanguagePriority

3  Indexes     允许使用目录控制类型的指令。它们包括AddDescription  AddIcon  AddIconByEncoding AddIconByType  DefaultIcon  DirectoryIndex  FancyIndexing  HeaderName  IndexIgnore  IndexOptions ReadmeName

4  Limit       允许使用权限控制指令。它们包括Allow Deny和Order

5  Options     允许使用控制目录特征的指令.他们包括Options 和XBitHack

Options

1  All         准许以下除MultiViews以外所有功能

2  MultiViews  允许多重内容被浏览,如果你的目录下有一个叫做foo.txt的文件,那么你可以通过/foo来访问到它,这对于一个多语言内容的站点比较有用

3  Indexes     若该目录下无index文件,则准许显示该目录下的文件以供选择

4  IncludesNOEXEC  准许SSI,但不可使用#exec和#include功能

5  Includes    准许SSI

6  FollowSymLinks  在该目录中,服务器将跟踪符号链接。注意,即使服务器跟踪符号链接,它也不会改变用来匹配不同区域的路径名,如果在<Local>;标记内设置,该选项会被忽略

7  SymLinksIfOwnerMatch  在该目录中仅仅跟踪本站点内的链接

8  ExecCGI     在该目录下准许使用CGI

2.  request   -->

$request->param();  会将 get  和 post 请求参数合并,一起获取到,注意使用提取自己需要使用的参数

tp5.0用$rquest->param()获取传递过来的参数,如果参数有重复的情况会覆盖,覆盖的规则如下:pathinfo参数会覆盖post中的参数,post中的参数会覆盖get中的参数

 public function index(Request $request)    {        echo 'admin Index index';        # 获取浏览器输入框的值        dump($request->domain());        dump($request->pathinfo());        dump($request->path());        #请求的类型        dump($request->method());        dump($request->isGet());        dump($request->isPost());        dump($request->isAjax());        #请求的参数        dump($request->get());        dump($request->param());        dump($request->post());        #session("akey","bvalue");        dump($request->session());        #cookie('email','123465@gmail.com');        dump($request->cookie());        #获取        dump($request->param('type'));        dump($request->cookie('email'));        #获取模块 控制器 操作        dump($request->module());        dump($request->controller());        dump($request->action());        dump($request->url());        dump($request->baseUrl());    }


3.   input 助手函数的理解

  例如   input('post.')    相当于  $request->post();

            input('get.')    相当于  $request->get();

           input('id')   相当于 $request->param(‘id’);

此时就要注意,param会合并get和post  ,若请求中

get  : id=11   。。。 post  : id=122   。。。 则  input('id' ) 得到122

 

    function input($key = '', $default = null, $filter = '')    {        if (0 === strpos($key, '?')) {            $key = substr($key, 1);            $has = true;        }        if ($pos = strpos($key, '.')) {            // 指定参数来源            list($method, $key) = explode('.', $key, 2);            if (!in_array($method, ['get', 'post', 'put', 'patch', 'delete', 'param', 'request', 'session', 'cookie', 'server', 'env', 'path', 'file'])) {                $key    = $method . '.' . $key;                $method = 'param';            }        } else {            // 默认为自动判断            $method = 'param';        }        if (isset($has)) {            return request()->has($key, $method, $default);        } else {            return request()->$method($key, $default, $filter);        }    }}


 4. 在phpstrom中 敲完doc后按Tab键   快速HTML模板

 

5 tp5 的 view

 public function index()    {        # 默认模块的地址  app/index/view/index/index.html        # (upload)          app/index/view/index/upload.html        # public/upload   app/index/view/public/upload.html        # ./123.html  因为tp是单入口文件,此时找到的是与index.php 同级的 123.html        # ./ 开头 找到入口文件同级开始的模板文件//   1.使用view助手函数跳转//     return view('index',[//            'email' =>  '123456@gmail.com'//        ],[//            'STATIC'=>'将页面所有STATIC替换成当前值的替换内容'//        ]);//   2.将当前类继承Controller (推荐使用这种)//     使用fetch()方法        //还可以用 $this->assign() 来传递遍历        $this->assign('assign','assign传递的内容');//        return $this->fetch('index',[//           'email' =>  '123456@gmail.com'//        ],[//            'STATIC'=>'将页面所有STATIC替换成当前值的替换内容'//        ]);//   3. $->display()         return $this->display('这是{$email}一个字符串',[             'email'=> '132465@gmail.com'         ]);    }    // 如果使用 fetch()方法是使用HTML文件来构建我们的模板,    // 使用display(),直接传递字符串,来构建模板。


 

 6.   fetch()

1. $this->fetch();
1) 建立模板文件
   -- 建立模板文件 D:\tp5\application\index\view\test_fetch.html
2) 建立渲染测试控制器文件
   -- 建立模板测试文件D:\tp5\application\index\controller\Viewtest.php
      输出如下内容:
<?php
namespace app\index\controller;
use think\Controller;
class Viewtest extends Controller
{

    public function test_fetch(){
        return $this -> fetch();
    }

}
    发现跳到 方法名的 同名模板
此时fetch() 跳转到 view\test_fetch.html,
原创粉丝点击