Maison développement back-end tutoriel php CakePHP 2.x CookBook 中文版 第五章 控制器 之 组件_PHP教程

CakePHP 2.x CookBook 中文版 第五章 控制器 之 组件_PHP教程

Jul 14, 2016 am 10:08 AM
cakephp 中文版 共享 多个 控制器 de chapitre 组件

组件

组件是在多个控制器中共享的逻辑包。如果人发现自己想要在控制器间复制粘贴某些东西时,你就应该考虑将一些功能包装在一个组件中了。
 
CakePHP 还配备了一套漂亮的、对你有用的核心组件:
 
Security(安全)
Sessions(会话)
Access control lists(访问控制列表)
Emails(电子邮件)
Cookies
Authentication(权限校验)
Request handling(请求处理)
Pagination(分页)
这些组件的详细信息都在各自的章节中。 现在,我们将向你展示如何建立你自己的组件。 创建组件可以保持控制器代码整洁,并且允许你在多个项目中重用代码。
 
配置组件
一些核心组件需要配置。需要配置的组件有 授权、 Cookie 和 电子邮件组件 等。 对于一般的组件,通常在$components 数组或者控制器的 beforeFilter 方法中进行配置:
 
1 class PostsController extends AppController {
2     public $components = array(
3         'Auth' => array(
4             'authorize' => array('controller'),
5             'loginAction' => array('controller' => 'users', 'action' => 'login')
6         ),
7         'Cookie' => array('name' => 'CookieMonster')
8     );
这是使用 $components 数组配置组件的例子。所有的核心组件都允许使用这种方式进行配置。此外,你也可以在控制器的 beforeFilter() 方法中配置组件。 这种方式通常用在你需要将一个函数的结果赋与一个组件属性的情况下。上面的例子还可以表示成:
 
1 public function beforeFilter() {
2     $this->Auth->authorize = array('controller');
3     $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
5     $this->Cookie->name = 'CookieMonster';
6 }
然而,也有这种可能:一个组件的特定配置选项要在控制器的 beforeFilter() 运行前设置。 最后,一些组件允许在$components 数组中设置配置选项:
 
1 public $components = array(
2     'DebugKit.Toolbar' => array('panels' => array('history', 'session'))
3 );
通过查阅相关文档可以确定每个组件都提供哪些配置选项。
 
className 是一个公用的设置选项,你可以借此给组件起个别名。当你想要用自定义的实现替换 $this->Auth 或者其它公用组件时,这个选项非常有用。
 
 1 // app/Controller/PostsController.php
 2 class PostsController extends AppController {
 3     public $components = array(
 4         'Auth' => array(
 5             'className' => 'MyAuth'
 6         )
 7     );
 8 }
 9 
10 // app/Controller/Component/MyAuthComponent.php
11 App::uses('AuthComponent', 'Controller/Component');
12 class MyAuthComponent extends AuthComponent {
13     // Add your code to override the core AuthComponent
14 }
上例的控制器中 $this->Auth 的别名为 MyAuthComponent 。
 
注解
 
在任何用到有别名的组件时,都要使用别名,包括在其它组件内引用。
 
使用组件
一旦你已经在控制器中包含了一些组件,用起来是非常简单的。在控制器中每个元件都以属性的方式使用。如果你已经在控制器中加载了 SessionComponent 和 the CookieComponent ,你就可以像下面这样访问它们:
 
1 class PostsController extends AppController {
2     public $components = array('Session', 'Cookie');
4     public function delete() {
5         if ($this->Post->delete($this->request->data('Post.id')) {
6             $this->Session->setFlash('Post deleted.');
7             $this->redirect(array('action' => 'index'));
8         }
9     }
注解
 
由于以属性身份加入到控制器中的模型和组件共享相同的 ‘命名空间’,你需要确保不给组件和模型相同的命名。
 
运行中加载组件
你也许不需要所有的组件在每个控制器方法中都可用。 这种情况下,你可以在运行时使用 Component Collection 加载一个组件。 在控制器内部,你可以按如下方式进行:
 
1 $this->OneTimer = $this->Components->load('OneTimer');
2 $this->OneTimer->getTime();
组件回调
 
组件也提供一些请求生命周期回调,以允许它们延伸请求周期。 有关组件提供的回调的更详细信息,请参阅 组件 API。
 
创建组件
假定我们的线上应用程序需要在其不同部分运行一个复杂的数学操作。我们可以创建一个组件包装这个用在几个不同控制器中的共享逻辑。
 
第一步是新的组件文件和类。创建的文件为 /app/Controller/Component/MathComponent.php。其基本结构如下:
 
1 App::uses('Component', 'Controller');
2 class MathComponent extends Component {
3     public function doComplexOperation($amount1, $amount2) {
4         return $amount1 + $amount2;
5     }
6 }
注解
 
所有的组件必须继承 Component。否则就会引发一个异常。
 
在控制器中包含组件
一旦组件完成,就可以通过将组件名称放进控制器的 $components 数组的方式在应用程序控制器中使用它了(参见 “组件” 部分)。控制器将自动提供一个用组件命名的新属性,通过这个属性我们可以访问组件的实例:
 
1 /* 生成一个新的组件变量 $this->Math
2   和一个标准的 $this->Session */
3 public $components = array('Math', 'Session');
定义在 AppController 中的组件将与其它控制器中的组件合并。因此不需要二次定义相同的组件。
 
在控制器中包含组件时,你还可以定义一组参数传递给组件的构造函数。这些参数随后将被组件处理:
 
1 public $components = array(
2     'Math' => array(
3         'precision' => 2,
4         'randomGenerator' => 'srand'
5     ),
6     'Session', 'Auth'
7 );
这段代码将包含了 precision 和 randomGenerator 的数组作为第二个参数传递给了 MathComponent::__construct()。根据约定,任何在组件上被传递的公共属性也将拥有基于此设置的值。
 
在组件中使用其它组件
有时一个组件还需要使用其它组件。在这种情况下,你可以使用与在控制器中包含组件相同的方式,在一个组件中包含另一个组件 - 使用 ``$components` 变量:
 
 1 // app/Controller/Component/CustomComponent.php
 2 App::uses('Component', 'Controller');
 3 class CustomComponent extends Component {
 4     // the other component your component uses
 5     public $components = array('Existing');
 6 
 7     public function initialize(Controller $controller) {
 8         $this->Existing->foo();
 9     }
10 
11     public function bar() {
12         // ...
13    }
14 }
15 
16 // app/Controller/Component/ExistingComponent.php
17 App::uses('Component', 'Controller');
18 class ExistingComponent extends Component {
19 
20     public function foo() {
21         // ...
22     }
23 }
组件 API
 
class Component
组件基类为通过 ComponentCollection 延迟加载其它组件以及处理公共设置提供了几个方法。它还为所有的组件回调提供了属性。
 
Component::__construct(ComponentCollection $collection, $settings = array())
组件基类构造函数。作为公共属性的所有 $settings 也将有与 settings 内设置的值匹配的值。
 
回调www.2cto.com
Component::initialize(Controller $controller)
initialize 方法在控制器的 beforeFilter 方法之前被调用。
 
Component::startup(Controller $controller)
startup 方法在控制器的 beforeFilter 之后但在控制器执行当前动作处理之前被调用。
 
Component::beforeRender(Controller $controller)
beforeRender 方法在执行请求动作逻辑之后,控制器渲染视图和布局之前被调用。
 
Component::shutdown(Controller $controller)
shutdown 方法在输出传送给浏览器之前被调用。
 
Component::beforeRedirect(Controller $controller, $url, $status=null, $exit=true)
beforeRedirect 方法在控制器跳转方法被调用之后,所有其它方法调用之前被调用。如果这个方法返回假,将不再继续完成请求的转向。$url、$status 和 $exit 变量对于控制器方法的意义相同。你还能返回一个字符串,作为转向的 url,或者返回带有键 ‘url’ 的关联数组,此数组的 ‘status’ 和 ‘exit’ 元素是可选的。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477792.htmlTechArticle组件 组件是在多个控制器中共享的逻辑包。如果人发现自己想要在控制器间复制粘贴某些东西时,你就应该考虑将一些功能包装在一个组件...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

Comment partager WallpaperEngine avec des amis Comment partager WallpaperEngine avec des amis Mar 18, 2024 pm 10:00 PM

Les utilisateurs peuvent partager les fonds d'écran qu'ils obtiennent avec des amis lorsqu'ils utilisent WallpaperEngine. De nombreux utilisateurs ne savent pas comment partager WallpaperEngine avec des amis. Ils peuvent enregistrer leurs fonds d'écran préférés localement, puis les partager avec des amis via un logiciel social. Comment partager WallpaperEngine avec des amis Réponse : Enregistrez-le localement et partagez-le avec vos amis. 1. Il est recommandé d'enregistrer vos fonds d'écran préférés localement, puis de les partager avec vos amis via un logiciel social. 2. Vous pouvez également le télécharger sur l'ordinateur via un dossier, puis cliquer sur Partager à l'aide de la fonction atelier créatif sur l'ordinateur. 3. Utilisez Wallpaperengine sur l'ordinateur, ouvrez la barre d'options de l'atelier créatif et recherchez

Comment partager l'écran sur WeChat Enterprise Comment partager l'écran sur WeChat Enterprise Feb 28, 2024 pm 12:43 PM

De plus en plus d'entreprises choisissent d'utiliser WeChat d'entreprise exclusif, ce qui non seulement facilite la communication entre les entreprises, les clients et les partenaires, mais améliore également considérablement l'efficacité du travail. Enterprise WeChat possède de riches fonctions, parmi lesquelles la fonction de partage d'écran est très populaire. Pendant la réunion, en partageant l'écran, les participants peuvent afficher le contenu de manière plus intuitive et collaborer plus efficacement. Alors, comment partager efficacement votre écran dans WeChat Enterprise ? Pour les utilisateurs qui ne le savent pas encore, ce guide didacticiel vous donnera une introduction détaillée. J'espère qu'il pourra vous aider ! Comment partager l'écran sur WeChat Enterprise ? 1. Dans la zone bleue sur le côté gauche de l'interface principale d'Enterprise WeChat, vous pouvez voir une liste de fonctions. Nous trouvons l'icône « Conférence ». Après avoir cliqué pour entrer, trois modes de conférence apparaîtront.

Comment configurer la fonction de démarrage du clavier sur une carte mère GIGABYTE (activer le mode de démarrage du clavier sur la carte mère GIGABYTE) Comment configurer la fonction de démarrage du clavier sur une carte mère GIGABYTE (activer le mode de démarrage du clavier sur la carte mère GIGABYTE) Dec 31, 2023 pm 05:15 PM

Comment configurer le démarrage du clavier sur la carte mère de Gigabyte Tout d'abord, s'il doit prendre en charge le démarrage du clavier, il doit s'agir d'un clavier PS2 ! ! Les étapes de configuration sont les suivantes : Étape 1 : appuyez sur Suppr ou F2 pour entrer dans le BIOS après le démarrage, et entrez dans le mode avancé (avancé) du BIOS. Les cartes mères ordinaires entrent dans le mode EZ (facile) de la carte mère par défaut. pour appuyer sur F7 pour passer au mode avancé. Les cartes mères de la série ROG entrent dans le BIOS par défaut (nous utilisons le chinois simplifié pour démontrer) Étape 2 : Sélectionnez - [Avancé] - [Gestion avancée de l'alimentation (APM)] Étape 3 : Recherchez l'option [Réveil par le clavier PS2] Étape 4 : Cette option est désactivée par défaut. Après avoir tiré vers le bas, vous pouvez voir trois options de configuration différentes, à savoir appuyer sur [barre d'espace] pour allumer l'ordinateur, appuyer sur groupe.

Comment installer le composant DirectPlay de l'ancienne version de Windows 10 Comment installer le composant DirectPlay de l'ancienne version de Windows 10 Dec 28, 2023 pm 03:43 PM

De nombreux utilisateurs rencontrent toujours des problèmes lorsqu'ils jouent à certains jeux sur Win10, tels que le gel de l'écran et les écrans flous. À l'heure actuelle, nous pouvons résoudre le problème en activant la fonction de lecture directe, et la méthode de fonctionnement de la fonction est également très simple. Comment installer Directplay, l'ancien composant de Win10 1. Entrez "Panneau de configuration" dans la zone de recherche et ouvrez-le 2. Sélectionnez de grandes icônes comme méthode d'affichage 3. Recherchez "Programmes et fonctionnalités" 4. Cliquez sur la gauche pour activer ou désactiver les fonctions Win 5. Sélectionnez l'ancienne version ici Cochez simplement la case

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Le premier choix des joueurs CS : configuration informatique recommandée Le premier choix des joueurs CS : configuration informatique recommandée Jan 02, 2024 pm 04:26 PM

1. Processeur Lors du choix d'une configuration informatique, le processeur est l'un des composants les plus importants. Pour jouer à des jeux comme CS, les performances du processeur affectent directement la fluidité et la vitesse de réponse du jeu. Il est recommandé de choisir les processeurs Intel Core i5 ou i7 car ils disposent de puissantes capacités de traitement multicœur et de hautes fréquences, et peuvent facilement répondre aux exigences élevées du CS. 2. Carte graphique La carte graphique est l'un des facteurs importants dans les performances du jeu. Pour les jeux de tir tels que CS, les performances de la carte graphique affectent directement la clarté et la fluidité de l'écran de jeu. Il est recommandé de choisir les cartes graphiques de la série NVIDIA GeForce GTX ou de la série AMD Radeon RX. Elles ont d'excellentes capacités de traitement graphique et une fréquence d'images élevée, et peuvent offrir une meilleure expérience de jeu. 3. Puissance de la mémoire.

Guide de partage de dossiers Windows 11 : partagez facilement vos fichiers et données Guide de partage de dossiers Windows 11 : partagez facilement vos fichiers et données Mar 13, 2024 am 11:49 AM

Dans la vie quotidienne et au travail, nous avons souvent besoin de partager des fichiers et des dossiers entre différents appareils. Le système Windows 11 offre des fonctions pratiques de partage de dossiers intégrées, nous permettant de partager facilement et en toute sécurité le contenu dont nous avons besoin avec d'autres au sein du même réseau tout en protégeant la confidentialité des fichiers personnels. Cette fonctionnalité rend le partage de fichiers simple et efficace sans se soucier de la fuite d'informations privées. Grâce à la fonction de partage de dossiers du système Windows 11, nous pouvons coopérer, communiquer et collaborer plus facilement, améliorant ainsi l'efficacité du travail et la commodité de la vie. Afin de réussir la configuration d'un dossier partagé, nous devons d'abord remplir les conditions suivantes : Tous les appareils (participant au partage) sont connectés au même réseau. Activez la découverte du réseau et configurez le partage. Connaître l'appareil cible

See all articles