Heim Backend-Entwicklung PHP-Tutorial Über die ThinkPHP-Controller-Analyse

Über die ThinkPHP-Controller-Analyse

Jun 08, 2018 pm 02:09 PM
thinkphp 控制器

Im Allgemeinen ist der Controller von ThinkPHP eine Klasse und die Operation ist eine öffentliche Methode der Controller-Klasse. Lassen Sie uns im Detail über den ThinkPHP-Controller sprechen

Im vorherigen Kurs hatten Sie vielleicht einige Zweifel am ThinkPHP-Routing, aber das spielt keine Rolle. Nach dem Studium dieses Kurses werden viele Dinge plötzlich klar.

Die Benennung der Controller-Datei folgt IndexController.class.php

Controller-Definition

Bevor wir beginnen, müssen wir noch die Definition von klären Controller:

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {

  public function read($id){
    echo "read page with </br>" .$id;
  }

  public function top(){
    echo "top page </br>";
  }

}
Nach dem Login kopieren

Wie Sie sehen können, ist der zuvor im Routing-Kapitel erwähnte Controller wie folgt definiert:

Verwenden Sie den entsprechenden Namespace. Der Standardwert ist Namespace HomeController
ThinkController laden
Der neue Controller erbt vom Controller (oder der Unterklasse)
Verwenden Sie die Benennungsmethode in Camel Case, achten Sie auf den Großbuchstaben des ersten Buchstabens
Öffentliche Methoden im Controller Es kann als Operation betrachtet werden. Die oben genannten Methoden read() und top() können beispielsweise als Operationen betrachtet werden.

http://localhost:8999/index.php/Home/Index/top
besteht darin, auf die top()-Methode zuzugreifen, die die oberste Seite auf der Seite ausdruckt und erneut erstellt Es ist klar, dass Home das Home-Modul

darstellt. Manchmal kann es zu Konflikten mit Systemschlüsselwörtern kommen. In diesem Fall können Sie das Suffix der Einstellungsoperationsmethode verwenden, um das Problem zu lösen.

Vor- und Nachoperationen

Vor- und Nachoperationen beziehen sich auf Methoden, die automatisch vor und nach der Ausführung einer Operationsmethode aufgerufen werden, jedoch nur für den Zugriff wirksam sind Controller, wie zum Beispiel das Hinzufügen von Pre- und Post-Methoden zur top()-Methode in IndexController:

public function _before_top(){
    echo "before top page </br>";
  }
  public function top(){
    echo "top page </br>";
  }
  public function _after_top(){
    echo "after top page </br>";
  }
Nach dem Login kopieren

Zugriff: http://localhost:8999 /index .php/Home/Index/top

wird den Ausdruck sehen:

before top page
top page
after top page
Nach dem Login kopieren

Voraussetzungen für Präfix- und Postfix-Operationen beachten. Beachten Sie die folgenden beiden Punkte:

Wenn die aktuelle Operation keine Operationsmethode definiert, sondern die Vorlagendatei direkt rendert, sind die Vor- und Nachmethoden dennoch wirksam, wenn sie definiert sind. Die eigentliche Vorlagenausgabe ist möglicherweise nur die aktuelle Operation, und die Vor- und Nachoperationen haben im Allgemeinen keine Ausgabe.

Es ist zu beachten, dass bei Verwendung der Exit- oder Fehlerausgabe in einigen Methoden die Post-Methode möglicherweise nicht mehr ausgeführt wird. Wenn beispielsweise die Fehlermethode der Systemaktion im aktuellen Vorgang aufgerufen wird, wird die Nachoperation nicht ausgeführt, die Ausführung der Erfolgsmethode nach der Methode wird jedoch nicht beeinträchtigt.

kann verwendet werden zur Formularfilterung und -überprüfung

Parameterbindung

Bei der Parameterbindung werden die Variablen in der URL-Adresse direkt als Parameter der Operationsmethode gebunden, was eine Vereinfachung ermöglichen kann die Definition der Methode und sogar das Routing.

&#39;URL_PARAMS_BIND&#39;    => true
Nach dem Login kopieren

Die Parameterbindungsfunktion ist standardmäßig aktiviert. Das Prinzip besteht darin, die Parameter in der URL (ausgenommen Modul-, Controller- und Operationsnamen) mit den Parametern in der Operationsmethode zu binden.
Es gibt zwei Möglichkeiten, Parameter zu binden: Bindung nach Variablennamen und Bindung nach Variablenname. Siehe zum Beispiel das folgende Beispiel:

 public function read($id){
    echo "read page with </br>".$id;
  }

 public function archive($year, $month){
    echo "$year </br>".$month;
  }
Nach dem Login kopieren

Ja, das ist der Inhalt des vorherigen Routings,

'blogs/:id'      => array('Index/read' )
Wir haben :id direkt dem Parameter $id der read()-Methode zugeordnet, sodass Ihnen die Routing-Regeln im Rückblick tatsächlich die Funktion geben, die URL anzupassen. Wenn wir die oben genannten Routing-Einstellungen entfernen, lautet unsere korrekte Zugriffsmethode:

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

Die ID in der obigen URL lautet die Variable Wenn Sie den Namen wie folgt schreiben:

 public function read($title){
    echo "read page with </br>".$title;
  }
Nach dem Login kopieren

, dann lautet die Zugriffsadresse:

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

Übergeben Sie bei der Bindung mehrerer Parameter einfach den entsprechenden Variablennamen und -wert, unabhängig von der Reihenfolge. Die folgenden beiden geben beispielsweise Folgendes zurück gleiches Ergebnis:

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

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

Es sollte beachtet werden, dass unabhängig von der Situation beim Besuch

http://localhost:8999/ index.php/Home /index/read/
meldet einen Fehler:

Parameterfehler oder undefiniert: id
Eine gute Möglichkeit, dieses Problem zu lösen, besteht darin, Standardwerte für gebundene Parameter festzulegen , wie zum Beispiel:

 public function read($id=0){
    echo "read page with </br>".$id;
  }
Nach dem Login kopieren

Auf diese Weise wird beim erneuten Zugriff auf die obige URL Folgendes ausgegeben:

Seite lesen mit
0

Tipps: Das Festlegen von Standardwerten für Bindungsparameter ist eine gute Möglichkeit, Fehler zu vermeiden
In der tatsächlichen Entwicklung werden wir tatsächlich URLs sehen, die keine Variablennamen anzeigen, wie zum Beispiel:

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

Wie löst man das Problem? Zu diesem Zeitpunkt können wir tatsächlich die zweite Art der Parameterbindung verwenden: die Bindung in variabler Reihenfolge. Um diese Parameterbindung zu verwenden, müssen Sie sie zunächst in den Einstellungen festlegen:

&#39;URL_PARAMS_BIND_TYPE&#39; => 1
Nach dem Login kopieren

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

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

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

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

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

伪静态

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

&#39;URL_HTML_SUFFIX&#39;=>&#39;shtml&#39;
Nach dem Login kopieren

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

&#39;URL_HTML_SUFFIX&#39; => &#39;html|shtml|xml&#39;
Nach dem Login kopieren

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

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

&#39;URL_DENY_SUFFIX&#39; => &#39;pdf|ico|png|gif|jpg&#39;,
Nach dem Login kopieren

注: URL_DENY_SUFFIX的优先级比URL_HTML_SUFFIX要高。

URL生成

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

定义规则

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

地址表达式

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

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

U('User/add') // 生成User控制器的add操作的URL地址
U('Article/read?id=1') // 生成Article控制器的read操作 并且id为1的URL地址
U('Admin/User/select') // 生成Admin模块的User控制器的select操作的URL地址

参数

U方法的第二个参数支持数组和字符串两种定义方式,如果只是字符串方式的参数可以在第一个参数中定义,例如:

U(&#39;Article/cate&#39;,array(&#39;cate_id&#39;=>1,&#39;status&#39;=>1))
U(&#39;Article/cate&#39;,&#39;cate_id=1&status=1&#39;)
U(&#39;Article/cate?cate_id=1&status=1&#39;)
Nach dem Login kopieren

三种方式是等效的,都是生成Article控制器的cate()操作 并且cate_id为1 status为1的URL地址

但是不允许使用下面的定义方式来传参数:

U(&#39;Article/cate/cate_id/1/status/1&#39;);
Nach dem Login kopieren

生成路由地址

U方法还可以支持路由,如果我们定义了一个路由规则为:

&#39;blogs/:id\d&#39;=>&#39;Index/read&#39;
Nach dem Login kopieren

那么可以使用

U(&#39;/blogs/1&#39;);
Nach dem Login kopieren

最终生成的URL地址是:

http://localhost:8999/index.php/Home/blogs/1

跳转和重定向

这应该是在开发中最常用的功能之一。在应用开发中,经常会遇到一些带有提示信息的跳转页面,例如操作成功或者操作错误页面,并且自动跳转到另外一个目标页面。系统的\Think\Controller类内置了两个跳转方法success()和error(),用于页面跳转提示。

跳转

使用方法很简单,比如我们在Index控制器下新建一个方法user(),写上下面的内容:

public function user()
  {
    $User = M(&#39;User&#39;);
    $data[&#39;username&#39;] = &#39;Think&#39;;
    $data[&#39;email&#39;] = &#39;Think@gmail.com&#39;;
    $result = $User->add($data);
    if($result){
      $this->success(&#39;success&#39;, &#39;/Home/User/addUser&#39;);
    } else {
      $this->error(&#39;failed&#39;);
    }
  }
Nach dem Login kopieren

M('User')表示实例化一个User对象,add()方法是向数据库添加一条纪录。然后我们需要新建一个UserController,在里面写上addUser()方法

<?php
namespace Home\Controller;

use Think\Controller;

class UserController extends Controller {

  public function addUser()
  {
    echo &#39;add user done!&#39;;
  }
}
Nach dem Login kopieren

然后在浏览器中访问http://localhost:8999/Home/Index/user,就可以看到add user done!了,下面详细来说说这两个重定向方法。

success()和error()方法的第一个参数表示提示信息,第二个参数表示跳转地址,第三个参数是跳转时间(单位为秒),例如:

// redirect to /Article/index after 3 seconds when success
$this->success(&#39;done&#39;,&#39;/Home/Article/index&#39;,3);
// redirect to /Article/error after 5 seconds when failed
$this->error(&#39;failed&#39;,&#39;/Home/Article/error&#39;,5);
Nach dem Login kopieren

如果不设置跳转时间,默认的等待时间success()方法是1秒,error()方法是3秒。看到上面的两个跳转地址前面都带上了/Home,如果你想简写为/Article/index,你需要在ThinkPHP的入口文件(项目目录下的index.php)中加上下面一行:

define(&#39;BIND_MODULE&#39;,&#39;Home&#39;);
Nach dem Login kopieren

而且这两个方法都有对应的模板,默认的设置是两个方法对应的模板都是:

&#39;TMPL_ACTION_ERROR&#39; => THINK_PATH . &#39;Tpl/dispatch_jump.tpl&#39;,
&#39;TMPL_ACTION_SUCCESS&#39; => THINK_PATH . &#39;Tpl/dispatch_jump.tpl&#39;,
Nach dem Login kopieren

你可以根据自己的需要来修改模版。

重定向

Controller类的redirect()方法可以实现页面的重定向功能。
redirect()方法的参数用法和U函数的用法一致(参考上一部分URL生成部分),例如:

$this->redirect('/Home/Article/show', array('id' => 2), 3, 'Redirecting...');
上面的用法是停留3秒后跳转到Article控制器的show()操作,并且显示页面跳转中字样Redirecting...,重定向后会改变当前的URL地址。

为了成功进行测试,我们在IndexController下添加redirectToArticle()方法并写上上面那行代码:

public function redirectToArticle()
  {
    $this->redirect(&#39;/Home/Article/show&#39;, array(&#39;id&#39; => 2), 3, &#39;Redirecting...&#39;);
  }
Nach dem Login kopieren

然后我们创建一个ArticleController,并且为他添加show()方法:

namespace Home\Controller;

use Think\Controller;

class ArticleController extends Controller {

  public function show($id)
  {
    echo &#39;This is an Article Page&#39;;
    // $id 变量我们后续会用到,现在只是演示跳转
  }
}
Nach dem Login kopieren

然后在浏览器访问:http://localhost:8999/Home/Index/redirectToArticle,等待三秒,你就可以看到跳转之后的页面了。

如果你仅仅是想重定向要一个指定的URL地址,而不是到某个模块的操作方法,可以直接使用redirect()函数重定向,例如

$this->redirect('/Home/Article/show/id/3', 'Redirecting...',3);

注:控制器的redirect()方法和redirect()函数的区别在于前者是用URL规则定义跳转地址,后者是一个纯粹的URL地址
注:好像官方文档是这样写的

$this->redirect(&#39;/New/category/cate_id/2&#39;, 5, &#39;页面跳转中...&#39;);
Nach dem Login kopieren

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于thinkphp3.2嵌入百度编辑器ueditor的解析

thinkPHP5.0框架访问URL的方法

Das obige ist der detaillierte Inhalt vonÜber die ThinkPHP-Controller-Analyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So führen Sie das Thinkphp-Projekt aus So führen Sie das Thinkphp-Projekt aus Apr 09, 2024 pm 05:33 PM

Um das ThinkPHP-Projekt auszuführen, müssen Sie: Composer installieren, das Projektverzeichnis aufrufen und http://localhost:8000 aufrufen.

Es gibt mehrere Versionen von thinkphp Es gibt mehrere Versionen von thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP verfügt über mehrere Versionen, die für verschiedene PHP-Versionen entwickelt wurden. Zu den Hauptversionen gehören 3.2, 5.0, 5.1 und 6.0, während Nebenversionen dazu dienen, Fehler zu beheben und neue Funktionen bereitzustellen. Die neueste stabile Version ist ThinkPHP 6.0.16. Berücksichtigen Sie bei der Auswahl einer Version die PHP-Version, die Funktionsanforderungen und den Community-Support. Für optimale Leistung und Support wird empfohlen, die neueste stabile Version zu verwenden.

So führen Sie thinkphp aus So führen Sie thinkphp aus Apr 09, 2024 pm 05:39 PM

Schritte zum lokalen Ausführen von ThinkPHP Framework: Laden Sie ThinkPHP Framework herunter und entpacken Sie es in ein lokales Verzeichnis. Erstellen Sie einen virtuellen Host (optional), der auf das ThinkPHP-Stammverzeichnis verweist. Konfigurieren Sie Datenbankverbindungsparameter. Starten Sie den Webserver. Initialisieren Sie die ThinkPHP-Anwendung. Greifen Sie auf die URL der ThinkPHP-Anwendung zu und führen Sie sie aus.

Laravel von Grund auf lernen: Detaillierte Erklärung des Controller-Methodenaufrufs Laravel von Grund auf lernen: Detaillierte Erklärung des Controller-Methodenaufrufs Mar 10, 2024 pm 05:03 PM

Laravel von Grund auf lernen: Detaillierte Erklärung des Controller-Methodenaufrufs Bei der Entwicklung von Laravel ist Controller ein sehr wichtiges Konzept. Der Controller dient als Brücke zwischen dem Modell und der Ansicht und ist für die Verarbeitung von Routenanforderungen und die Rückgabe entsprechender Daten an die Ansicht zur Anzeige verantwortlich. Methoden in Controllern können über Routen aufgerufen werden. In diesem Artikel wird detailliert beschrieben, wie Methoden in Controllern geschrieben und aufgerufen werden, und es werden spezifische Codebeispiele bereitgestellt. Zuerst müssen wir einen Controller erstellen. Sie können zum Erstellen das Artisan-Befehlszeilentool verwenden

Was ist besser, Laravel oder Thinkphp? Was ist besser, Laravel oder Thinkphp? Apr 09, 2024 pm 03:18 PM

Leistungsvergleich von Laravel- und ThinkPHP-Frameworks: ThinkPHP schneidet im Allgemeinen besser ab als Laravel und konzentriert sich auf Optimierung und Caching. Laravel schneidet gut ab, aber für komplexe Anwendungen ist ThinkPHP möglicherweise besser geeignet.

So installieren Sie thinkphp So installieren Sie thinkphp Apr 09, 2024 pm 05:42 PM

ThinkPHP-Installationsschritte: Bereiten Sie PHP-, Composer- und MySQL-Umgebungen vor. Erstellen Sie Projekte mit Composer. Installieren Sie das ThinkPHP-Framework und die Abhängigkeiten. Datenbankverbindung konfigurieren. Anwendungscode generieren. Starten Sie die Anwendung und besuchen Sie http://localhost:8000.

Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben Nov 22, 2023 pm 12:01 PM

„Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben“ Mit der rasanten Entwicklung der Internettechnologie stellen Webanwendungen immer höhere Anforderungen an die Verarbeitung einer großen Anzahl gleichzeitiger Anforderungen und komplexer Geschäftslogik. Um die Systemleistung und das Benutzererlebnis zu verbessern, erwägen Entwickler häufig die Verwendung asynchroner Aufgaben, um einige zeitaufwändige Vorgänge auszuführen, z. B. das Senden von E-Mails, das Verarbeiten von Datei-Uploads, das Erstellen von Berichten usw. Im Bereich PHP bietet das ThinkPHP-Framework als beliebtes Entwicklungsframework einige praktische Möglichkeiten zur Implementierung asynchroner Aufgaben.

Wie ist die Leistung von thinkphp? Wie ist die Leistung von thinkphp? Apr 09, 2024 pm 05:24 PM

ThinkPHP ist ein leistungsstarkes PHP-Framework mit Vorteilen wie Caching-Mechanismus, Codeoptimierung, Parallelverarbeitung und Datenbankoptimierung. Offizielle Leistungstests zeigen, dass es mehr als 10.000 Anfragen pro Sekunde verarbeiten kann und in großen Websites und Unternehmenssystemen wie JD.com und Ctrip in praktischen Anwendungen weit verbreitet ist.

See all articles