Inhaltsverzeichnis
使用路由器
Zend_Controller_Router_Route
变量请求
一个简单的应用例子
Heim Backend-Entwicklung PHP-Tutorial ZF Rewrite路由后$this->url的问题_PHP教程

ZF Rewrite路由后$this->url的问题_PHP教程

Jul 13, 2016 am 10:33 AM
zend framework

Zend_Controller_Router_Rewrite是标准的框架路由器。路由是个过程,在这个过程中它取出URI的端点(跟着基本URL的URI的那部分)并把它分解成参数来决定哪个模块、哪个控制器和控制器中的哪个动作应该接受请求。模块、控制器、动作和其它参数被打包到Zend_Controller_Request_Http对象,接着这个对象由Zend_Controller_Dispatcher_Standard来处理。路由只发生一次:当请求最初被接收和第一个控制器被派遣之前。

Zend_Controller_Router_Rewrite被设计来考虑使用纯php结构时mod_rewrite-like的功能性。它非常宽松地基于Ruby on Rails并且不要求任何先前的web服务器URL rewriting的知识。它被设计来和单个Apache的 mod_rewrite规则(其中之一)一起工作:

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
Nach dem Login kopieren

或者:

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 
Nach dem Login kopieren

使用路由器

为正确使用rewrite路由器你必须初始化它,添加一些用户定义的路由并注入到控制器。下面的代码示例这个过程:

<?php
/* Create a router */
$router = $ctrl->getRouter(); // returns a rewrite router by default
$router->addRoute(
	'user',
	new Zend_Controller_Router_Route('user/:username', array('controller' => 'user', 'action' => 'info'))
);
Nach dem Login kopieren

RewriteRouter的核心是用户定义路由的定义。路由通过调用RewriteRouter的addRoute方法和传递一个由类实现的Zend_Controller_Router_Route_Interface的新的实例被添加。例如:

<?php
$router->addRoute('user', new Zend_Controller_Router_Route('user/:username'));
Nach dem Login kopieren

Rewrite 路由器带有四个基本类型的路由(其中一个是特殊的):

  • Zend_Controller_Router_Route
  • Zend_Controller_Router_Route_Static
  • Zend_Controller_Router_Route_Regex
  • 缺省路由

路由可以被使用无数次来创建链或用户定义的应用程序路由计划。你可以在任何配置中使用任何数量的路由,除了模块路由以外,它最好被用一次并作为通用路由(例如,作为缺省的)。每个路由将在稍后详细描述。

addRoute的第一个参数是路由名。它用来作为权柄从路由器中取得路由(例如,for URL generation purposes)。第二个参数是路由自己。路由名最普通的用法是通过Zend_View_url助手的方法:

<a href="<?= $this->url(array('username' => 'martel'), 'user') ?>">Martel</a>
Nach dem Login kopieren

路由是一个简单的过程,这个过程通过所有提供的路由和匹配它的当前请求的URI定义来迭代。当一个正匹配被发现,变量值从路由实例返回并注入到Zend_Controller_Request对象以备将来在派遣器和用户创建的控制器中使用。如果是负匹配,在链中的下个路由被检查。从路由返回的值来自于URL参数或用于定义的缺省值。这些变量以后可通过Zend_Controller_Request::getParam() 或 Zend_Controller_Action::_getParam() 方法来访问。

有三个特殊的变量可用于你的路由-'module'、 'controller' 和 'action'。这些特殊的变量被Zend_Controller_Dispatcher用来找出控制器和动作然后派遣过去。

Zend_Controller_Router_Rewrite 和缺省路由一起预先配置,它将以controller/action的形式匹配URIs。另外,模块名可以被指定作为第一个路径参数,允许这种module/controller/action形式的URIs。最后,它也将缺省地匹配任何另外的追加到URI的参数-controller/action/var1/value1/var2/value2。

一些路由如何匹配的例子:

// Assuming the following:
$ctrl->setControllerDirectory(
    array(
        'default' => '/path/to/default/controllers',
        'news'    => '/path/to/news/controllers',
        'blog'    => '/path/to/blog/controllers'
    )
);
Module only:
http://example/news
    module == news
Invalid module maps to controller name:
http://example/foo
    controller == foo
Module + controller:
http://example/blog/archive
    module     == blog
    controller == archive
Module + controller + action:
http://example/blog/archive/list
    module     == blog
    controller == archive
    action     == list
Module + controller + action + params:
http://example/blog/archive/list/sort/alpha/date/desc
    module     == blog
    controller == archive
    action     == list
    sort       == alpha
    date       == desc
Nach dem Login kopieren

缺省路由是存储在RewriteRouter名(index)为'default'的简单的Zend_Controller_Router_Route_Module对象。它被创建多多少少象下面这样:

<?php
$compat = new Zend_Controller_Router_Route_Module(array(), $dispatcher, $request);
$this->addRoute('default', $compat);
Nach dem Login kopieren

如果你不想这个特别的缺省路由在你的路由计划中,你可以重写你自己的'缺省'路由(例如,把它存储在'default'名下)或用removeDefaultRoutes()完全清除它:

<?php
// Remove any default routes
$router->removeDefaultRoutes();
Nach dem Login kopieren

Zend_Controller_Router_Route

Zend_Controller_Router_Route 是标准的框架路由。它结合了灵活路由定义的易用性。每个路由包含了基本的URL映射(静态的和动态的部分(变量))并且可以被缺省地初始化,也可以根据不同的要求初始化。

让我们想象一下我们假设的应用程序将需要一些广域内容作者的信息页面。我们想能够把浏览器指向http://domain.com/author/martel去看一个叫"martel"的信息。有这样功能的路由看起来是这样的:

<?php
$route = new Zend_Controller_Router_Route(
    'author/:username',
    array(
        'controller' => 'profile',
        'action'     => 'userinfo'
    )
);
$router->addRoute('user', $route);
Nach dem Login kopieren

在Zend_Controller_Router_Route里构造函数的第一个参数是路由的定义,它将匹配一个URL。路由定义包含静态的和动态部分,它们由正斜杠('/')符分开。静态部分只是简单的字符:author。动态部分,被叫做变量,用预设的冒号来标记变量名::username。

当你把浏览器指向http://domain.com/author/martel这个例子的路由应该被匹配,它所有的变量将被注入到Zend_Controller_Request对象并在ProfileController可访问。由这个例子返回的变量可能会被表示为如下键和值配对的数组:

<?php
$values = array(
    'username'   => 'martel',
    'controller' => 'profile',
    'action'     => 'userinfo'
);
Nach dem Login kopieren

稍后,基于这些值,Zend_Controller_Dispatcher_Standard应该调用ProfileController类(在缺省模块中)中的userinfoAction()方法。你将依靠Zend_Controller_Action::_getParam()或者Zend_Controller_Request::getParam()方法能够访问所有的变量:

<?php
public function userinfoAction()
{
    $request = $this->getRequest();
    $username = $request->getParam('username');
    $username = $this->_getParam('username');
}
Nach dem Login kopieren

路由定义可以包一个额外的特别字符-通配符-表示为'*'号。它被用来取得参数,和缺省模块路由类似(在URI中定义的var=>value)。下面的路由多多少少地模仿了模块路由的行为:

<?php
$route = new Zend_Controller_Router_Route(
    ':module/:controller/:action/*',
    array('module' => 'default')
);
$router->addRoute('default', $route);
Nach dem Login kopieren

变量请求

当变量请求被设定,第三个参数可以加给Zend_Controller_Router_Route的构造函数。这些被定义为正则表达式的一部分:

<?php
$route = new Zend_Controller_Router_Route(
    'archive/:year',
    array(
        'year'       => 2006,
        'controller' => 'archive',
        'action'     => 'show'
    ),
    array('year' => '\d+')
);
$router->addRoute('archive', $route);
Nach dem Login kopieren

用上述定义的路由,路由器仅当year变量包含数字数据将匹配它,例如http://domain.com/archive/2345。象http://example.com/archive/test这样的URL将不被匹配并且控制将被传递给在链中的下一个路由。

一个简单的应用例子

<ul id="nav">  
	<li><a href="<?php echo $this->url(array('controller'=>'index'),null,true);?>" title="Home">首页</a></li>  
	<li><a href="<?php echo $this->url(array('controller'=>'news','action'=>'index'),null,true);?>" title="news">新闻</a></li>
</ul>  
Nach dem Login kopieren

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/752425.htmlTechArticleZend_Controller_Router_Rewrite是标准的框架路由器。路由是个过程,在这个过程中它取出URI的端点(跟着基本URL的URI的那部分)并把它分解成参数...
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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Verwendung von Zend Framework mit PHP: Kurzanleitung Verwendung von Zend Framework mit PHP: Kurzanleitung Jun 21, 2023 am 08:58 AM

Verwendung von ZendFramework mit PHP: Kurzanleitung ZendFramework ist ein Open-Source-Webanwendungs-Framework auf PHP-Basis, das leistungsstark und leicht erweiterbar ist. ZendFramework enthält viele nützliche Komponenten, die Ihnen beim Erstellen effizienter Webanwendungen helfen können. In diesem Artikel wird die Verwendung von ZendFramework in PHP vorgestellt, um Ihnen den schnellen Einstieg zu erleichtern. Installieren Sie ZendFramewo

Effiziente Datenbankabfrage durch Zend Framework-Middleware Effiziente Datenbankabfrage durch Zend Framework-Middleware Jul 28, 2023 pm 01:13 PM

Implementierung effizienter Datenbankabfragen durch die ZendFramework-Middleware Einführung Im Entwicklungsprozess sind Datenbankabfragen ein unvermeidlicher Bestandteil. Eine effiziente Datenbankabfrage kann die Systemleistung und das Benutzererlebnis erheblich verbessern. ZendFramework ist ein weit verbreitetes PHP-Framework mit leistungsstarken Datenbankbetriebsfunktionen. In diesem Artikel wird vorgestellt, wie effiziente Datenbankabfragen mithilfe der ZendFramework-Middleware implementiert werden, und es werden entsprechende Codebeispiele bereitgestellt. 1. ZendF verstehen

Zend Framework-Middleware: Implementierung von Volltextsuch- und Paging-Funktionen Zend Framework-Middleware: Implementierung von Volltextsuch- und Paging-Funktionen Jul 30, 2023 pm 08:49 PM

ZendFramework ist ein leistungsstarkes Entwicklungsframework, das Entwicklern hilft, schnell leistungsstarke, skalierbare PHP-Anwendungen zu erstellen. Unter diesen ist Middleware ein wichtiges Konzept in ZendFramework, das uns bei der Implementierung von Volltextsuch- und Paging-Funktionen helfen kann. In diesem Artikel wird erläutert, wie Sie Middleware in ZendFramework verwenden, um diese beiden Funktionen zu implementieren, und es werden Codebeispiele bereitgestellt. 1. Volltextsuchfunktion Die Volltextsuche ist eine der häufigsten Funktionen in modernen Anwendungen.

Zend Framework-Middleware: Fügt Anwendungen OAuth- und OpenID-Anmeldeunterstützung hinzu Zend Framework-Middleware: Fügt Anwendungen OAuth- und OpenID-Anmeldeunterstützung hinzu Jul 28, 2023 pm 01:09 PM

ZendFramework Middleware: Hinzufügen von OAuth- und OpenID-Login-Unterstützung zu Anwendungen Die Benutzerauthentifizierung ist eine entscheidende Funktion in heutigen Internetanwendungen. Um ein besseres Benutzererlebnis und mehr Sicherheit zu bieten, entscheiden sich viele Anwendungen für die Integration von Anmeldediensten von Drittanbietern wie OAuth und OpenID. In ZendFramework können wir über Middleware ganz einfach OAuth- und OpenID-Anmeldeunterstützung zu unseren Anwendungen hinzufügen. Zuerst müssen wir Ze installieren

Zend Framework-Middleware: Bietet E-Mail-Benachrichtigungs- und Nachrichten-Push-Funktionen Zend Framework-Middleware: Bietet E-Mail-Benachrichtigungs- und Nachrichten-Push-Funktionen Jul 29, 2023 pm 08:29 PM

ZendFramework-Middleware: Bietet E-Mail-Benachrichtigungs- und Nachrichten-Push-Funktionen. Einführung: Mit der Entwicklung des Internets und der Popularität von Smartphones sind E-Mail-Benachrichtigung und Nachrichten-Push zu einer der am häufigsten verwendeten Funktionen in der modernen Softwareentwicklung geworden. In ZendFramework können wir Middleware verwenden, um E-Mail-Benachrichtigungs- und Nachrichten-Push-Funktionen zu implementieren. In diesem Artikel wird die Verwendung der ZendFramework-Middleware zur Implementierung von E-Mail-Benachrichtigungen und Nachrichten-Push vorgestellt und entsprechende Codebeispiele bereitgestellt. 1. Vorbereitungsarbeiten in

Zend Framework-Middleware: Fügen Sie Webanwendungen Social-Login-Funktionalität hinzu Zend Framework-Middleware: Fügen Sie Webanwendungen Social-Login-Funktionalität hinzu Jul 28, 2023 pm 07:21 PM

ZendFramework ist ein auf PHP basierendes Open-Source-Framework, das viele leistungsstarke Tools und Komponenten zum Erstellen skalierbarer Webanwendungen bereitstellt. In diesem Artikel wird vorgestellt, wie Sie die Middleware von ZendFramework verwenden, um Social-Login-Funktionalität zu Webanwendungen hinzuzufügen. Middleware ist Code, der ausgeführt wird, bevor oder nachdem eine Anfrage in Ihre Anwendung gelangt. Es ermöglicht Entwicklern, den Prozess der Bearbeitung von Anfragen anzupassen und zu erweitern. ZendFramework bietet eine flexible Möglichkeit dazu

Zend Framework-Middleware: Alipay- und WeChat-Zahlungsfunktionen zu Anwendungen hinzufügen Zend Framework-Middleware: Alipay- und WeChat-Zahlungsfunktionen zu Anwendungen hinzufügen Jul 28, 2023 pm 08:01 PM

ZendFramework-Middleware: Hinzufügen von Alipay- und WeChat-Zahlungsfunktionen zu Anwendungen Einführung: Mit der Popularität mobiler Zahlungen sind Alipay- und WeChat-Zahlungen in vielen Anwendungen zu unverzichtbaren Zahlungsmethoden geworden. In diesem Artikel wird erläutert, wie Sie mithilfe der ZendFramework-Middleware Alipay- und WeChat-Zahlungsfunktionen zur Anwendung hinzufügen. Durch das Studium dieses Artikels erfahren Sie, wie Sie Middleware zur Vereinfachung des Zahlungsprozesses einsetzen und auf Ihre tatsächlichen Projekte anwenden. 1. Vorbereitung Bevor Sie beginnen, müssen Sie

CodeIgniter vs. Zend Framework: Welches Framework eignet sich besser für die Entwicklung von ERP-Systemen? CodeIgniter vs. Zend Framework: Welches Framework eignet sich besser für die Entwicklung von ERP-Systemen? Jun 19, 2023 am 08:53 AM

Wenn Sie sich für die Entwicklung eines ERP-Systems entscheiden, ist die Wahl eines geeigneten Frameworks entscheidend. Hier vergleichen wir die beiden PHP-Frameworks CodeIgniter und ZendFramework, um Ihnen dabei zu helfen, ein Framework zu finden, das besser für Ihre ERP-Systementwicklung geeignet ist. CodeIgniter und ZendFramework sind beliebte PHP-Frameworks. Beide bieten viele Funktionen und sind erweiterbar und wartbar. Allerdings unterscheiden sich diese beiden Frameworks in einigen Aspekten erheblich und sind für einige Anwendungen besser geeignet.

See all articles