php教程 php手册 ThinkPHP控制器详解

ThinkPHP控制器详解

Jun 06, 2016 pm 07:51 PM
thinkphp 제어 장치

一般来说,ThinkPHP的控制器是一个类,而操作则是控制器类的一个公共方法。下面我们就来详细谈谈ThinkPHP的控制器

在上一课程中,你可能会对ThinkPHP的路由会有一丝丝疑惑,不过没关系,学完本课程,很多事都会豁然开朗。

控制器文件命名遵守IndexController.class.php的方式

控制器的定义

在开始之前,我们还是需要明确一下控制器的定义:

" .$id; } public function top(){ echo "top page "; } }

如所见,前面在路由篇提到的控制器就是这么定义的:

使用相应的命名空间,默认是namespace Home\Controller
加载Think\Controller
新建控制器继承于Controller(或子类)
采用驼峰命名法,注意首字母大写
控制器内的公共方法可以看作一个操作,比如上面的read()和top()方法就可以看作操作,我们在路由篇的时候都验证过了。

:8999/index.php/Home/Index/top
就是访问到top()方法,会在页面上打印出top page ,再次明确Home代表的是Home模块

有时候可能会遇到有和系统的关键字冲突的方法,这时候就可以使用设置操作方法后缀来解决了,具体请看官方文档:

前置和后置操作

前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效,如在IndexController中为top()方法添加前置后置方法:

public function _before_top(){ echo "before top page "; } public function top(){ echo "top page "; } public function _after_top(){ echo "after top page "; }

访问::8999/index.php/Home/Index/top

就会看到打印出:

before top page top page after top page

使用前置和后置操作要注意如下两点:

如果当前的操作并没有定义操作方法,而是直接渲染模板文件,那么如果定义了前置和后置方法的话,依然会生效。真正有模板输出的可能仅仅是当前的操作,前置和后置操作一般情况是没有任何输出的。

需要注意的是,在有些方法里面使用了exit或者错误输出之类的话 有可能不会再执行后置方法了。例如,如果在当前操作里面调用了系统Action的error方法,那么将不会再执行后置操作,但是不影响success方法的后置方法执行

可以用于表单的过滤和验证

参数绑定

参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数,可以简化方法的定义甚至路由的解析。

'URL_PARAMS_BIND' => true


参数绑定功能默认是开启的,其原理是把URL中的参数(不包括模块、控制器和操作名)和操作方法中的参数进行绑定。
参数绑定有两种方式:按照变量名绑定和按照变量顺序绑定,默认使用的是按照变量名绑定,比如看下面的例子:

public function read($id){ echo "read page with ".$id; } public function archive($year, $month){ echo "$year ".$month; }

对,这个就是上一篇路由所涉及的内容,在之前路由的路由设置处

'blogs/:id'               => array('Index/read')
我们将:id直接映射给read()方法的参数$id,所以现在回头再看,其实路由规则就是给了你一个自定义URL的功能。如果去掉上面的路由设置,我们正确的访问方式是:

:8999/Home/index/read/id/3

上面的URl中id就是变量名,如果你写成:

public function read($title){ echo "read page with ".$title; }

那么访问地址就是:

:8999/index.php/Home/index/read/title/3

对于多个参数绑定的情况,只要将相应的变量名和值传进来就可以了,不在乎顺序,比如下面两个会返回相同的结果:

:8999/index.php/Home/index/archive/year/2012/month/12

:8999/index.php/Home/index/archive/month/12/year/2012

需要注意的是,不管那种情况之下,当你访问

:8999/index.php/Home/index/read/
是会报错的:

参数错误或者未定义:id
解决的一个好方法就是,给绑定的参数设置默认值,比如:

public function read($id=0){ echo "read page with ".$id; }

这样再次访问上面的URL,就会输出:

read page with
0

tips:给绑定参数设置默认值是一个避免报错的好办法
在实际的开发中,我们其实会见到没有显示变量名这样的URL,如:

:8999/index.php/Home/index/read/3

怎么解决呢?这个时候,我们其实就可以用到第二种参数绑定:按照变量顺序绑定。要使用这种参数绑定,需要先在设置项中设置:

'URL_PARAMS_BIND_TYPE' => 1

一旦设置变量顺序绑定,这种情况下URL地址中的参数顺序非常重要,不能随意调整。这种情况下操作方法的定义不需要改变,只是访问的URL变了而已,现在用上面的方式访问就可以正确访问了。

如果在变量顺序绑定的情况下,我们访问:

:8999/index.php/Home/index/archive/2012/12

:8999/index.php/Home/index/archive/12/2012

这两个结果显然是不一样,后者并不是我们想要的。所以这种情况需要严格遵守顺序来传值。

伪静态

URL伪静态通常是为了满足更好的SEO效果,ThinkPHP支持伪静态URL设置,可以通过设置URL_HTML_SUFFIX参数随意在URL的最后增加你想要的静态后缀,,而不会影响当前操作的正常执行,默认情况下,伪静态的设置为html。但我们可以自己设置,例如

'URL_HTML_SUFFIX'=>'shtml'

如果希望支持多个伪静态后缀,可以直接设置如下:

'URL_HTML_SUFFIX' => 'html|shtml|xml'

如果此项设置留空则表示可以支持所有的静态后缀。

也可以设置禁止访问的URL后缀通过URL_DENY_SUFFIX来设置,例如:

'URL_DENY_SUFFIX' => 'pdf|ico|png|gif|jpg',
注: URL_DENY_SUFFIX的优先级比URL_HTML_SUFFIX要高。

URL生成

为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响。

定义规则

U方法的定义规则如下(方括号内参数根据实际应用决定):
U('地址表达式',['参数'],['伪静态后缀'],['显示域名'])

地址表达式

地址表达式的格式定义如下:

[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...
如果不定义模块的话 就表示当前模块名称,下面是一些简单的例子:

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

thinkphp 프로젝트를 실행하는 방법 thinkphp 프로젝트를 실행하는 방법 Apr 09, 2024 pm 05:33 PM

ThinkPHP 프로젝트를 실행하려면 다음이 필요합니다: Composer를 설치하고, 프로젝트 디렉터리를 입력하고 php bin/console을 실행하고, 시작 페이지를 보려면 http://localhost:8000을 방문하세요.

thinkphp에는 여러 버전이 있습니다. thinkphp에는 여러 버전이 있습니다. Apr 09, 2024 pm 06:09 PM

ThinkPHP에는 다양한 PHP 버전용으로 설계된 여러 버전이 있습니다. 메이저 버전에는 3.2, 5.0, 5.1, 6.0이 포함되며, 마이너 버전은 버그를 수정하고 새로운 기능을 제공하는 데 사용됩니다. 최신 안정 버전은 ThinkPHP 6.0.16입니다. 버전을 선택할 때 PHP 버전, 기능 요구 사항 및 커뮤니티 지원을 고려하십시오. 최상의 성능과 지원을 위해서는 최신 안정 버전을 사용하는 것이 좋습니다.

thinkphp를 실행하는 방법 thinkphp를 실행하는 방법 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework를 로컬에서 실행하는 단계: ThinkPHP Framework를 로컬 디렉터리에 다운로드하고 압축을 풉니다. ThinkPHP 루트 디렉터리를 가리키는 가상 호스트(선택 사항)를 만듭니다. 데이터베이스 연결 매개변수를 구성합니다. 웹 서버를 시작합니다. ThinkPHP 애플리케이션을 초기화합니다. ThinkPHP 애플리케이션 URL에 접속하여 실행하세요.

Laravel을 처음부터 학습하기: 컨트롤러 메소드 호출에 대한 자세한 설명 Laravel을 처음부터 학습하기: 컨트롤러 메소드 호출에 대한 자세한 설명 Mar 10, 2024 pm 05:03 PM

Laravel을 처음부터 배우기: 컨트롤러 메소드 호출에 대한 자세한 설명 Laravel 개발에 있어서 컨트롤러는 매우 중요한 개념입니다. 컨트롤러는 모델과 뷰 사이의 브리지 역할을 하며 경로의 요청을 처리하고 해당 데이터를 표시하기 위해 뷰에 반환합니다. 컨트롤러의 메서드는 경로로 호출할 수 있습니다. 이 문서에서는 컨트롤러에서 메서드를 작성하고 호출하는 방법을 자세히 소개하고 구체적인 코드 예제를 제공합니다. 먼저 컨트롤러를 만들어야 합니다. Artisan 명령줄 도구를 사용하여 생성할 수 있습니다.

laravel과 thinkphp 중 어느 것이 더 낫나요? laravel과 thinkphp 중 어느 것이 더 낫나요? Apr 09, 2024 pm 03:18 PM

Laravel과 ThinkPHP 프레임워크의 성능 비교: ThinkPHP는 일반적으로 최적화 및 캐싱에 중점을 두고 Laravel보다 성능이 좋습니다. Laravel은 잘 작동하지만 복잡한 애플리케이션의 경우 ThinkPHP가 더 적합할 수 있습니다.

thinkphp를 설치하는 방법 thinkphp를 설치하는 방법 Apr 09, 2024 pm 05:42 PM

ThinkPHP 설치 단계: PHP, Composer 및 MySQL 환경을 준비합니다. Composer를 사용하여 프로젝트를 만듭니다. ThinkPHP 프레임워크와 종속성을 설치합니다. 데이터베이스 연결을 구성합니다. 애플리케이션 코드를 생성합니다. 애플리케이션을 실행하고 http://localhost:8000을 방문하세요.

개발 제안: ThinkPHP 프레임워크를 사용하여 비동기 작업을 구현하는 방법 개발 제안: ThinkPHP 프레임워크를 사용하여 비동기 작업을 구현하는 방법 Nov 22, 2023 pm 12:01 PM

"개발 제안: ThinkPHP 프레임워크를 사용하여 비동기 작업을 구현하는 방법" 인터넷 기술의 급속한 발전으로 인해 웹 응용 프로그램은 많은 수의 동시 요청과 복잡한 비즈니스 논리를 처리하기 위한 요구 사항이 점점 더 높아졌습니다. 시스템 성능과 사용자 경험을 향상시키기 위해 개발자는 이메일 보내기, 파일 업로드 처리, 보고서 생성 등과 같이 시간이 많이 걸리는 작업을 수행하기 위해 비동기 작업을 사용하는 것을 종종 고려합니다. PHP 분야에서 널리 사용되는 개발 프레임워크인 ThinkPHP 프레임워크는 비동기 작업을 구현하는 몇 가지 편리한 방법을 제공합니다.

thinkphp 성능은 어떤가요? thinkphp 성능은 어떤가요? Apr 09, 2024 pm 05:24 PM

ThinkPHP는 캐싱 메커니즘, 코드 최적화, 병렬 처리 및 데이터베이스 최적화와 같은 장점을 갖춘 고성능 PHP 프레임워크입니다. 공식 성능 테스트에 따르면 초당 10,000개 이상의 요청을 처리할 수 있으며 JD.com, Ctrip과 같은 대규모 웹 사이트 및 엔터프라이즈 시스템에서 실제 응용 프로그램으로 널리 사용됩니다.

See all articles