zoukankan      html  css  js  c++  java
  • 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

    预览效果得到:

     

  • 相关阅读:
    svn command line tag
    MDbg.exe(.NET Framework 命令行调试程序)
    Microsoft Web Deployment Tool
    sql server CI
    VS 2010 One Click Deployment Issue “Application Validation did not succeed. Unable to continue”
    mshtml
    大厂程序员站错队被架空,只拿着五折工资!苟活和离职,如何选择?
    揭秘!Windows 为什么会蓝屏?微软程序员竟说是这个原因...
    喂!千万别忘了这个C语言知识!(~0 == -1 问题)
    Linux 比 Windows 更好,谁反对?我有13个赞成理由
  • 原文地址:https://www.cnblogs.com/yanran/p/4925152.html
Copyright © 2011-2022 走看看