开始yaf之旅
目录结构
+ public <span //</span><span 网站根目录</span> - index.php <span //</span><span 入口文件</span> - .htaccess <span //</span><span 重写规则 </span> +<span conf </span>|- application.ini <span //</span><span 配置文件 </span> application/ +<span controllers </span>- Index.php <span //</span><span 默认控制器</span> +<span views </span>|+ index <span //</span><span 控制器</span> - index.phtml <span //</span><span 默认视图</span> + modules <span //</span><span 其他模块</span> - library <span //</span><span 组件目录</span> - models <span //</span><span model目录</span> - plugins <span //</span><span 插件目录</span>
入口文件
入口文件是所有请求的入口, 一般都借助于rewrite规则, 把所有的请求都重定向到这个入口文件.
一个经典的入口文件public/index.php
<?<span php </span><span define</span>("APP_PATH", <span realpath</span>(<span dirname</span>(<span __FILE__</span>) . '/../')); <span /*</span><span 指向public的上一级 </span><span */</span> <span $app</span> = <span new</span> Yaf_Application(APP_PATH . "/conf/application.ini"<span ); </span><span $app</span>->run();
重写规则
除非我们使用基于query string的路由协议(Yaf_Route_Simple, Yaf_Route_Supervar), 否则我们就需要使用WebServer提供的Rewrite规则, 把所有这个应用的请求, 都定向到上面提到的入口文件.
修改.htaccess文件
Nginx的Rewrite (nginx.conf)
<span server { listen </span><span 80</span><span ; server_name yaf.demo.com; root document_root; index index.php index.html index.htm; </span><span if</span> (!-<span e $request_filename) { rewrite </span>^/(.*) /index.php/$<span 1</span><span last; } }</span>
配置文件
在Yaf中, 配置文件支持继承, 支持分节. 并对PHP的常量进行支持. 你不用担心配置文件太大造成解析性能问题, 因为Yaf会在第一个运行的时候载入配置文件, 把格式化后的内容保持在内存中. 直到配置文件有了修改, 才会再次载入.
一个简单的配置文件application/conf/application.ini
<span [common] application.directory </span>= APP_PATH <span "</span><span /application</span><span "</span><span application.dispatcher.catchException </span>= <span 0</span><span application.dispatcher.throwException </span>= <span 0</span><span application.view.ext </span>= <span '</span><span phtml</span><span '</span><span [product : common] ;enable the error controller application.dispatcher.catchException</span>=<span 1</span>
控制器
在Yaf中, 默认的模块/控制器/动作, 都是以Index命名的, 当然,这是可通过配置文件修改的.
对于默认模块, 控制器的目录是在application目录下的controllers目录下, Action的命名规则是"名字+Action"
默认控制器application/controllers/Index.php
<?<span php </span><span class</span> IndexController <span extends</span><span Yaf_Controller_Abstract { </span><span public</span> <span function</span> indexAction() {<span //</span><span 默认Action</span> <span $this</span>->getView()->assign("content", "Hello World"<span ); } } </span>?>
视图文件
Yaf支持简单的视图引擎, 并且支持用户自定义自己的视图引擎, 比如Smarty.
对于默认模块, 视图文件的路径是在application目录下的views目录中以小写的action名的目录中.
一个默认Action的视图application/views/index/index.phtml
<html> <head> <title>Hello yaf</title> </head> <body> <?php <span echo</span> <span $content</span>;?> </body> </html>
然后在浏览器输入nginx.conf设置的servername,
表 4.2. Yaf可选配置项
名称 | 值类型 | 默认值 | 说明 |
---|---|---|---|
application.ext | String | php | PHP脚本的扩展名 |
application.bootstrap | String | Bootstrapplication.php | Bootstrap路径(绝对路径) |
application.library | String | application.directory + "/library" | 本地(自身)类库的绝对目录地址 |
application.baseUri | String | NULL | 在路由中, 需要忽略的路径前缀, 一般不需要设置, Yaf会自动判断. |
application.dispatcher.defaultModule | String | index | 默认的模块 |
application.dispatcher.throwException | Bool | True | 在出错的时候, 是否抛出异常 |
application.dispatcher.catchException | Bool | False | 是否使用默认的异常捕获Controller, 如果开启, 在有未捕获的异常的时候, 控制权会交给ErrorController的errorAction方法, 可以通过$request->getException()获得此异常对象 |
application.dispatcher.defaultController | String | index | 默认的控制器 |
application.dispatcher.defaultAction | String | index | 默认的动作 |
application.view.ext | String | phtml | 视图模板扩展名 |
application.modules | String | Index | 声明存在的模块名, 请注意, 如果你要定义这个值, 一定要定义Index Module |
application.system.* | String | * | 通过这个属性, 可以修改yaf的runtime configure, 比如application.system.lowcase_path, 但是请注意只有PHP_INI_ALL的配置项才可以在这里被修改, 此选项从2.2.0开始引入 |
<em id="__mceDel"><em id="__mceDel"><span <br /><br /></span></em></em>

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Qu'il s'agisse d'un article, d'un article ou d'un tutoriel, le point fort de tout document est le titre et bien sûr la table des matières. Il décrit la structure générale du document afin que les utilisateurs puissent accéder à l'endroit et à ce qu'ils s'attendent à lire dans le document. C'est également une bonne pratique d'ajouter une table des matières à la plupart des documents pour leur donner un aspect plus professionnel. Aujourd'hui, tout se passe en ligne et les gens utilisent Google Docs pour créer la plupart des documents. De nombreux utilisateurs ne savent toujours pas comment insérer ou ajouter une table des matières dans Google Docs. Par conséquent, nous proposons cet article pour expliquer comment créer ou insérer une table des matières dans Google Docs. Comment insérer une table des matières dans Google Docs Étape 1 : Cliquez ici pour visiter Google Docs Online. Étape 2 : Si

Utilisez la fonction File.isDirectory() de Java pour déterminer si un fichier existe et est de type répertoire. En programmation Java, vous rencontrez souvent des situations dans lesquelles vous devez déterminer si un fichier existe et est de type répertoire. Java fournit la classe File pour gérer les fichiers et les répertoires. La fonction isDirectory() peut nous aider à déterminer si un fichier est un type de répertoire. La fonction File.isDirectory() est une méthode de la classe File. Sa fonction est de déterminer le fichier actuel.

Introduction à la fonction PHP — rename() : Renommer des fichiers ou des répertoires Introduction : En PHP, la fonction rename() est utilisée pour renommer des fichiers ou des répertoires. Il fournit un moyen simple de modifier le nom d’un fichier ou d’un répertoire. Qu'il s'agisse d'un seul fichier ou d'un répertoire entier, vous pouvez utiliser cette fonction pour effectuer une opération de renommage. Le processus de renommage peut être facilement réalisé en spécifiant le nom du fichier ou du répertoire source et le nom cible. Syntaxe : boolrename(string$source,str

La fonction glob() en PHP est utilisée pour rechercher des fichiers ou des répertoires et constitue une puissante fonction d'opération de fichiers. Il peut renvoyer le chemin d'un fichier ou d'un répertoire en fonction d'une correspondance de modèle spécifiée. La syntaxe de la fonction glob() est la suivante : glob(pattern, flags) où pattern représente la chaîne de modèle à rechercher, qui peut être une expression générique, telle que *.txt (fichiers correspondants se terminant par .txt), ou un chemin de fichier spécifique. flags est un paramètre facultatif utilisé pour contrôler la fonction

Chaque année, avant qu'Apple ne publie une nouvelle version majeure d'iOS et de macOS, les utilisateurs peuvent télécharger la version bêta plusieurs mois à l'avance pour en faire l'expérience en premier. Étant donné que le logiciel est utilisé à la fois par le public et par les développeurs, Apple a lancé des versions développeur et publique, qui sont des versions bêta publiques des versions bêta développeur, pour les deux. Quelle est la différence entre la version développeur et la version publique d’iOS ? Littéralement parlant, la version développeur est une version bêta développeur et la version publique est une version bêta publique. La version développeur et la version publique ciblent des publics différents. La version développeur est utilisée par Apple pour les tests par les développeurs. Vous avez besoin d'un compte développeur Apple pour la télécharger et la mettre à niveau.

La version mobile de WeChat Reading App est un très bon logiciel de lecture. Ce logiciel fournit de nombreux livres et ouvrages. Vous pouvez les lire à tout moment, n'importe où avec une recherche en un clic et les lire en ligne. Tous sont officiellement autorisés et de différents types. des livres sont soigneusement rangés et profitez d’une atmosphère de lecture confortable et relaxante. Changez les modes de lecture de différents scénarios, mettez à jour les derniers chapitres du livre en continu chaque jour, prenez en charge la connexion en ligne à partir de plusieurs appareils et le téléchargement par lots sur l'étagère. Vous pouvez le lire avec ou sans Internet, afin que tout le monde puisse en découvrir plus de connaissances. Désormais, l'éditeur le détaille en ligne. Promouvoir la méthode de visualisation du catalogue pour les partenaires de lecture de WeChat. 1. Ouvrez le livre dont vous souhaitez consulter le catalogue et cliquez au milieu du livre. 2. Cliquez sur l'icône à trois lignes dans le coin inférieur gauche. 3. Dans la fenêtre contextuelle, affichez le catalogue de livres

Sélectionnez le style du catalogue dans Word, et il sera automatiquement généré une fois l'opération terminée. Analyse 1. Accédez à Word sur votre ordinateur et cliquez pour importer. 2Après avoir entré, cliquez sur le répertoire du fichier. 3 Sélectionnez ensuite le style du répertoire. 4. Une fois l'opération terminée, vous pouvez voir que le répertoire de fichiers est automatiquement généré. Supplément : la table des matières de l'article de résumé/notes est générée automatiquement, y compris les titres de premier niveau, les titres de deuxième niveau et les titres de troisième niveau, généralement pas plus que les titres de troisième niveau.

Utilisez la fonction path/filepath.Split pour diviser le chemin en deux parties : répertoire et nom de fichier Lors du développement de programmes ou du traitement de fichiers, il est souvent nécessaire de diviser le chemin en deux parties : répertoire et nom de fichier. En langage Go, vous pouvez utiliser la fonction Split dans le package path/filepath pour réaliser cette fonction. Cet article présentera l'utilisation de la fonction Split et donnera des exemples de code. La fonction Split est définie comme suit : funcSplit(pathstring)(di
