CakePHP$this语法

CakePHP$this语法,php,cakephp,Php,Cakephp,我已经试着学习CakePhp有一段时间了,但是我仍然不能得到很多东西。我读了很多书,看了很多视频。我只想问一个非常简单的问题 我一直试图搞乱书签教程,我正在看一段视频。在视频中,他烘焙了一个名为Validate的组件。他在键盘上打字 bin/cake/bake component Validate 然后,ValidateComponent.php出现在控制器的组件文件夹中。现在,他使用ValidateComponent.php,转到BookmarksController并添加到initiali

我已经试着学习CakePhp有一段时间了,但是我仍然不能得到很多东西。我读了很多书,看了很多视频。我只想问一个非常简单的问题

我一直试图搞乱书签教程,我正在看一段视频。在视频中,他烘焙了一个名为Validate的组件。他在键盘上打字

bin/cake/bake component Validate
然后,ValidateComponent.php出现在控制器的组件文件夹中。现在,他使用ValidateComponent.php,转到BookmarksController并添加到initialize方法

$this->loadComponent('Validate');
我只是想问“验证”这个词是从哪里来的?它不应该是ValidateComponent吗?他是从哪里得到loadComponent的?我见过他使用
$this->method()
$this->method('string',[array])我只想知道语法是如何工作的以及每个单词的意思。对不起,解释得太长了。我真的在努力学习,我真的很困惑。多谢各位

ValidateComponent.php

    <?php
namespace App\Controller\Component;

use Cake\Controller\Component;
use Cake\Controller\ComponentRegistry;

/**
 * Validate component
 */
 class ValidateComponent extends Component
{

/**
 * Default configuration.
 *
 * @var array
 */
protected $_defaultConfig = [];

public function validLimit($limit, $ default)
{
    if (is_numeric($limit)){
    return $limit;
}
return $default;
}

}

我似乎找不到他是从哪里得到“验证”这个词的。

$这与蛋糕无关,而是PHP本身的一部分。在面向对象上下文中,$这只是指当前类

$this->something引用当前范围内的对象。这可能在当前类中,也可能来自扩展或使用

$this->something();类似地指当前范围内的方法或函数

如果您使用的是诸如netbeans之类的IDE,您通常可以通过单击这些引用来查看它们引用的对象,例如,如果您确实使用netbeans,您可以按住ctrl键单击$this->loadComponent('Validate');查看它所指的实际功能

关于“Validate”从何而来,它是传递给该对象的字符串。另一方面,它将在函数中使用,可能在switch或if语句中使用,以返回某些内容

例如:


应用程序中的每个控制器都扩展了一个基本控制器
controller
AppController
,它扩展了
controller

Controller
有很多方法,其中一种方法是
loadComponent()
()

为什么要验证而不是验证组件?

简短回答:后缀

CakePHP使用后缀加载类,当您点击
loadComponent()
进入类注册组件时,ComponentRegistry将调用App类来加载类

CakePHP中几乎所有内容都有后缀,在您的示例中,ValidateComponent有
组件
后缀

returnapp::className($class,'Controller/Component','Component')()


我希望这对您更有意义

谢谢。这是我的问题,我想知道“验证”是从哪里来的。我正在使用xampp。但是谢谢!Xampp不是一个ide,它是一个为您安装Apache和MySQL的软件。Ide就是用来编码的。我的意思是我只是在用记事本++。但是,嘿,谢谢!至少我学会了我可以使用netbeans查找东西。:)我强烈推荐netbeans而不是notepad++,当然它有过度膨胀的名声,但只要你的电脑还可以,这并不重要。这会让你的生活简单得多。我还建议在花太多时间学习cakephp之前先学习非MVC PHP。我试着像你一样先学习MVC(symfony2),但它所做的一切都阻碍了我。现在我知道这是怎么回事了。symfoby很容易。只需先学习oo PHP。您需要阅读PHP语言的OOP章节。在尝试使用框架之前,先学习该语言的基础知识。该框架还附带了不同类型的内置验证机制。此外,组件是错误的验证位置。了解MVC和设计模式。我建议你在文档中做博客教程,而不是盲目地跳入未知的水域。@burzum感谢这些材料!我一定会用它!对不起,如果我在这里盲目地跳。我了解我读过的大部分基础知识,只是我缺乏阅读材料,因为我不知道去哪里看,找什么,你给了我一本。谢谢这是有道理的。这意味着Validate和ValidateComponent是相同的,对吗?是的,Component是一个
关键字
,或者在我们的例子中我们称之为
后缀
 public function initialize()
{
    parent::initialize();

    $this->loadComponent('Validate');

}
Public function loadComponent($type){
    If($type == 'Validation'){
     //do something
    }
}
public function loadComponent($name, array $config = [])
     {
         list(, $prop) = pluginSplit($name);
         $this->{$prop} = $this->components()->load($name, $config);
     }