• thinkphp 第二节


      thinkphp使用了同意文件入口,我们对该网站的所有请求都会经过该入口文件,然后tp会分析URL中的参数的含义,然后解析当前请求的模块和操作。

      tp会分析URL,然后根据该URL找到相应的Controller的响应方法

      thinkphp的四种url模式

    1:普通模式

    2:PATHINFO模式:默认模式

    3:REWRITE模式:重写模式

    4:兼容模式

    *******PATHINFO模式:默认模式********

    他的特点:url中分隔符比较统一,便于搜索引擎抓取页面。

      url:localhost:8080/demo/index.php/Home/Index/xin,index.php 是它的入口文件,其后的第一个参数表示模块,第二个表示控制器,第三个表示方法名

      下面我们修改该模块的默认的分隔符,我们可以在Application目录下的Common下的Conf下

    的config.php 文件中添加如下一项:

    <?php

    return array(

      //修改默认的url分隔符

      ‘URL_PATHINFO_DEPR’=>'-',

    );

    ?>

    那么当我们输入

    localhost:8080/demo/index.php/HOME-INdex-xin

    就相当于我们刚刚输入的

    localhost:8080/demo/index.php/HOME/INdex/xin

    其他URL模式:

    1:所谓的普通模式,就是我们最原始的是用?和& 以及=来传值的模式,不建议使用

    2:所谓的重写模式,比如我们需要用如下网址访问

    http://www.5idev.com/index.php/Index/insert

    但开启重写模式后,就可以用下面的方式直接访问

    http://www.5idev.com/Index/insert

    更改 Apache httpd.conf 配置文件

    一、加载了 mod_rewrite.so

     确认加载了 mod_rewrite.so 模块(将如下配置前的 # 号去掉):

    LoadModule rewrite_module modules/mod_rewrite.so

    二.在省略掉inde.php的同一级目录下添加一个.htaccess 文件

    内容为下:
    <IfModule rewrite_module>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    </IfModule>

    三:

      AllowOverride none 要改成all

    四:注意改完后要重启apache

    参考网址:

    http://sjolzy.cn/ThinkPHP-remove-the-indexphp-url.html

    http://www.myexception.cn/h/937874.html

    url配置参考手册:

    http://doc.thinkphp.cn/manual/url_mode.html

    ********来自tp的配置*********

    我们可以在thinkphp的conf目录下发现convention.php

    url 配置:

    'URL_CASE_INSENSITIVE' => true, // 默认false 表示URL区分大小写 true则表示不区分大小写
    'URL_MODEL' => 1, // URL访问模式,可选参数0、1、2、3,代表以下四种模式:
    // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 默认为PATHINFO 模式
    'URL_PATHINFO_DEPR' => '/', // PATHINFO模式下,各参数之间的分割符号
    'URL_PATHINFO_FETCH' => 'ORIG_PATH_INFO,REDIRECT_PATH_INFO,REDIRECT_URL', // 用于兼容判断PATH_INFO 参数的SERVER替代变量列表
    'URL_REQUEST_URI' => 'REQUEST_URI',//获取当前页面地址的系统变量

    *********控制器*************

    1:我们新建一个自己的控制器,取名为:xinController.class.php

    2:xin 是我们起的控制器名,这里的controller这个后缀是必须加的,他用于tp系统 查找该控制器,否则tp系统无法寻找他,而后面的.class.php 则说明该php文件是一个类文件

    3:其实这个控制器的实现方式,仍然可以在里面使用echo或者var_dump 等输出函数,当然它也可以调用模板

    范例:

    <?php
    namespace HomeController;
    use ThinkController;
    class XinController extends Controller{
    public function index(){
    $this->show('这是我的天下,我怕谁');
    }
    public function show($name,$age){
    var_dump($_GET);
    echo "我叫:$name","年龄:$age";
    }
    }

    ?>

    在浏览器上输入:localhost:8080/demo/Home/Xin/show/name/张三/age/21

    效果为:

    第三节:使用模板

    *************模板位置******************

    Application目录下的Home文件夹下的View文件夹

    **************配置文件*************

    在thinkphp目录下的config目录下的convention.php文件,针对文本的配置项

    TMPL_CONTENT_TYPE' => 'text/html', // 默认模板输出类型
    'TMPL_ACTION_ERROR' => THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认错误跳转对应的模板文件
    'TMPL_ACTION_SUCCESS' => THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认成功跳转对应的模板文件
    'TMPL_EXCEPTION_FILE' => THINK_PATH.'Tpl/think_exception.tpl',// 异常页面的模板文件
    'TMPL_DETECT_THEME' => false, // 自动侦测模板主题
    'TMPL_TEMPLATE_SUFFIX' => '.html', // 默认模板文件后缀
    'TMPL_FILE_DEPR' => '/', //模板文件CONTROLLER_NAME与ACTION_NAME之间的分割符
    // 布局设置
    'TMPL_ENGINE_TYPE' => 'Think', // 默认模板引擎 以下设置仅对使用Think模板引擎有效
    'TMPL_CACHFILE_SUFFIX' => '.php', // 默认模板缓存后缀
    'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数
    'TMPL_DENY_PHP' => false, // 默认模板引擎是否禁用PHP原生代码
    'TMPL_L_DELIM' => '{', // 模板引擎普通标签开始标记
    'TMPL_R_DELIM' => '}', // 模板引擎普通标签结束标记
    'TMPL_VAR_IDENTIFY' => 'array', // 模板变量识别。留空自动判断,参数为'obj'则表示对象
    'TMPL_STRIP_SPACE' => true, // 是否去除模板文件里面的html空格与换行
    'TMPL_CACHE_ON' => true, // 是否开启模板编译缓存,设为false则每次都会重新编译

    ****************创建一个模板并显示**************

    在application->Home->View 写一个index.html

    <html>

    <head>

    <title>hello {$name}</title>

    </head>

    <body>

    HELLO,{$name}
    </body>

    </html>

    注意:{$name}之间不要加任何空格,否则会解析错误

    然后再Application->Home->StarController.class.php文件

    <?php
    namespace HomeController;
    use ThinkController;
    class StarController extends Controller{
    public function index(){
    $this->assign("name","yanran");
    $this->display();
    }
    }

    ?>

    最后在浏览器中输入地址:localhost:8080/demo/index.php/Home/star/index

    ********模板的一些语法********

    1:对于数组,我们在控制器和模板中的写法如下:

    //在控制器中

    $data['name']='yanran';

    $data['age']='21';

    $this->assign('data',$data);

    //在模板中

    {$data.name}

    {$data.age}

    或者说

    {$data['name']}

    {$data['age']}

    例如:

    starController.class.php

    index.html

    结果显示:

    2:对于对象,

    //对象的第一种写法

    {$data:name}

    {$data:age}

    //对象的第二种写法

    {$data->name}

    {$data->age}

    3:循环表示:

      foreach或者volist

    <foreach name="list" item="vo">

    {$key}|{$vo.id}:{$vo.name}

    </foreach>

    其中:name 表示数据源,而item表示循环变量 ,$key表示索引,即输出到了第几个

    范例:

    在view->star 下,新建一个show.html

    预览效果得到:

     

  • 相关阅读:
    R语言中的logical(0)和numeric(0)以及赋值问题
    创建hadoop用户
    虚拟机安装
    spark1-MapReduce
    arcgis1-shp转成mdb
    Actor-配置Maven
    scala6-单词计数(map(),flatMap())
    scala5-数组
    scala4-函数
    scala3-for循环
  • 原文地址:https://www.cnblogs.com/yanran/p/4925152.html
Copyright © 2020-2023  润新知