ThinkPHP教程| PHP框架的ThinkPHP(2)[URL路径访问和模块控制

电脑杂谈  发布时间:2020-07-26 05:04:20  来源:网络整理

thinkphp pathinfo 路径修改_thinkphp pathinfo模式_thinkphp修改图片路径

首先,URL路径访问和模块控制器

URL模块(控制器)操作(方法)

上述三个之间的关系的URL: 模块/动作

1. ThinkPHP规定,两点

·首先,默认情况下,所有主条目文件都将访问索引控制器(模块)

·第二,所有控制器默认都执行索引方法(动作)

特别是以上两点是独立的!也就是说thinkphp pathinfo 路径修改,“所有主条目文件默认都访问索引控制器并默认执行索引方法”

然后,即使没有指定模块和动作,也将在索引控制器中执行索引方法!

2,(自定义)控制器命名约定

例如,用户管理控制器(模块)UserAction.class.php模块名称Action.class.php,并且模块名称的首字母必须大写

以上是文件名命名约定. 同时,请注意,类名必须与文件名一致,即UserAction.class.php中的类名必须为UserAction. 另外请注意,此类必须继承Action类

3. 只能访问模块中的公共方法. 受保护的方法和私有方法都无法访问.

显然,这很容易理解,因为在入口文件中基本上有两个语句: $ userAction = new UserAction; $ userAction-> method name();

那么,在控制器中定义私有方法的意义和意义是什么?结果是非常必要的,因为对于模块中的某个动作,可能是因为某个动作更加复杂,需要执行的代码更多,或者某个动作的安全性要求相对较高,那么一部分代码或安全性的高位代码是用此模块的另一个私有方法编写的,然后在操作(方法)中调用. 这样,可以简化代码,使代码看起来更有条理,更安全!

另一种情况是,在模块中,每个动作(控制器)可能有一段通用的代码,那么这段通用代码也可以封装在私有方法中,然后由其他动作调用模块!有人可能会问,由于它是公共的,为什么不将其写入项目目录-> Common目录中的功能文件中. 为此,我个人的理解是项目目录-> Common目录中的功能是所有模块Common,这里是模块中每个动作的公共位置,请在此处停止!

thinkphp修改图片路径_thinkphp pathinfo模式_thinkphp pathinfo 路径修改

4,ps,在实际的项目开发过程中,最好将(自定义)控制器(或模型)的名称映射为中文(或英文),并将它们写在文档中,并解释这些控制器(或模型),这些方法的作用以及这些方法的作用,不仅使他人易于阅读,而且使自己易于阅读!

URL的两种,四种模式

ThinkPHP支持的URL模式包括普通模式thinkphp pathinfo 路径修改,PATHINFO模式,REWRITE模式和兼容模式,所有这些都提供路由支持. 默认值为PATHINFO模式,该模式可提供最人性化的体验(易于查看)和搜索引擎友好的支持(SEO,搜索引擎易于检查)!标签分别为0、1、2和3,可以在项目目录-> Conf目录-> Config.php文件中的修改中找到

1,正常模式

2,PATHINFO模式

请注意,在PATHINFO模式下,不能以普通模式&id = 1格式使用GET值,这是因为如果以这种方式编写,系统会错误地认为actionName&id = 1总体上是一个动作名称!

在默认的PATHINFO模式下,如果以正常模式编写URL,它将自动成为PATHINFO模式格式!那就没有在我的环境中测试过,嗯...

3,“重写”模式

重写模式,与伪静态相关

您可以自己编写相关的重写规则,也可以直接使用ThinkPHP提供的重写规则. 如果使用ThinkPHP提供的重写规则,则为

请注意,您必须先执行两项操作,然后才能启用REWRITE模式

·首先,打开Web服务器的重写模块. 以Apache为例. 在Apache主目录-> conf目录-httpd.conf文件中,删除语句前的#,如下图所示. IIS,Nginx自引用文件Ha

·第二,在入口文件级别的目录中创建一个.htaccess文件,然后将以下内容复制到.htaccess文件中并保存!至于为什么叫.htaccess,是因为Apache规定了它!以下内容还增加了一些如何在Windows下创建名称为.xxx格式的文件

在REWRITE模式下,也可以识别PATHINFO模式下的URL,但是如果未打开REWRITE模式,则不能识别下REWRITE模式下的URL!

如果您有兴趣,请参阅Apache手册中的URL重写指南以了解有关URL重写的更多信息

thinkphp pathinfo模式_thinkphp修改图片路径_thinkphp pathinfo 路径修改

4. 兼容模式

当服务器不支持PATHINFO模式时,如果整个项目的所有URL都以PATHINFO模式编写,则会出现路径不存在的错误!这是显而易见的. 服务器根本无法识别您的URL. 怎么了?但是,将项目中的所有URL都更改为普通模式太麻烦了,因此ThinkPHP设计人员设计了兼容性模式,这意味着兼容性模式在项目中打开(config.php中的配置为3),即使服务器不支持PATHINFO模式,并且可以识别PATHINFO模式的URL!

三种,两种模式的PATHINFO

PATHINFO本身也有两种模式,即普通模式和智能模式(智能识别模块和动作)

1,正常模式

必须指定模块和操作,即m / moduleName / a / actionName / id / 1. 并且由于指定了模块和动作,因此可以颠倒动作和模块的顺序

·设置

它也设置在项目目录-> Conf目录-> config.php中,“ URL_PATHINFO_MODEL” => 1

2,智能模式

无需指定模块和操作,默认模式为[URL的两种模式],该模式基于智能模式!所谓的模块和动作智能识别是将紧随条目文件之后的URL中的第一个参数用作moduleName,将第二个参数用作actionName. 显然,此时操作和模块的顺序不能颠倒.

·设置

它也设置在项目目录-> Conf目录-> config.php中,“ URL_PATHINFO_MODEL” => 2

请注意,无论是普通模式还是智能模式,GET传递的值都必须采用键/值格式,即必须指定键.

“ URL_PATHINFO_DEPR” =>“-”设置可以修改定界符(默认为/),即m-moduleName-a-actionName-id-1. 同样,此设置对普通模式和智能模式均有效

可以使用.html后缀设置“ URL_HTML_SUFFIX” =>“ html”以更好地支持SEO,即html

四,模板与控制器之间的关系

首先,您必须知道应用程序模板必须放置在应用程序目录-> Tpl目录->默认目录中. 请注意,初始化应用程序时会自动生成默认目录. 同时,您可以在Tpl目录中自定义目录. 它是一个自定义外观,默认目录是应用默认外观的目录. 当然,您也可以将模板放在自定义目录中!

thinkphp pathinfo 路径修改_thinkphp pathinfo模式_thinkphp修改图片路径

第二,必须在每个外观目录中为项目模块创建一个相应的目录,并在创建的目录中为模块操作创建一个相应的模板

最后,您需要知道调用模板($ this-> display();)的操作是在模块的操作中发生的

1. 基于以上三点,我们来谈谈$ this-> display();

如果未传递任何值,则将调用默认外观目录中当前模块目录中当前操作的模板,例如

一些朋友可能有一些疑问. display()方法未在UserAction类中定义. 如何直接使用display()?呃,我忘记了Yo背后的延伸动作!是的,display()是Action类中的方法!

如果您传递值,则有几种情况,ps,如果您传递值,则对于模板名称,您只需要在后缀之前写下名称,例如.html,这是相应的动作名称.

·调用当前模块的其他动作模板

$ this-> display(“当前模块的其他动作名称”);

·调用其他模块的动作模板

$ this-> display(“其他模块名称: 动作名称”);实际上,严格来说,这里的模块名称和操作名称实际上是指默认外观目录下的目录名称及其下的文件. 这只是一个名称,不需要将模块及其操作放在Action目录中,但是只需在Tpl目录下->默认外观目录下有一个名为“其他模块名”的目录,并且该目录下有一个“动作名”即可. 模板文件就可以了!

·调用其他皮肤模板

$ this-> display(“皮肤名称@模块名称: 动作名称”);

thinkphp修改图片路径_thinkphp pathinfo模式_thinkphp pathinfo 路径修改

·直接通过路径调用模板

$ this-> display(“ template path”);模板路径可以是相对路径,也可以是绝对路径,但是要注意,如果使用相对路径,则必须相对于入口文件

实际上,我想在这里解释的是,实际上,前三种情况转换为底部的路径,而外观名称,模块名称和操作名称实际上是指目录和文件名

上面只提到了display()方法的第一个参数,而display()方法还有两个参数,分别是“模板代码”(指定模板输出代码)和“模板格式”(指定模板输出格式) (text / html或text / xml))!

2,$ this-> assign()

$ this-> assign(“模板变量名称”,“值或变量”);

我在这里提到要修改模板标记定界符. ThinkPHP自己的模板引擎的默认定界符为{},并且默认定界符将与模板中的js代码和内联css冲突,因此通常在实际开发期间,会修改template标记的定界符,并在应用程序中配置文件修改如下

3. 模板调用案例问题

打开调试模式后,ThinkPHP将在Linux下模拟文件名的大小写敏感性,但是经过测试,发现它仅对文件名的大小写敏感,而对文件名的大小写不敏感. 文件夹名称.

同时,我也验证了上面的句子,即[事实上,我想在这里解释的是,实际上,前三个案例也被转换为底部的路径,名称,模块名称和操作名称实际上是指目录和文件名]

实际上,在测试期间,还发现了一个问题,即加载模块和执行动作的操作不区分大小写,因为如果在加载模块或执行动作时出错,则以下内容报告错误


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-288156-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 徐雅丽
        徐雅丽

        我们还应建造更多更好的军舰才符合我国的实际

      热点图片
      拼命载入中...