我一直在尝试学习CakePhp一段时间,但我仍然无法获得很多东西。我一直在看很多东西并观看视频。我只是想问一个非常简单的问题。
我一直在试图弄乱书签教程,我正在观看视频。在视频中,他烘焙了一个名为Validate的组件。在他输入的cmd中
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;
}
}
BookmarksController.php的一部分
public function initialize()
{
parent::initialize();
$this->loadComponent('Validate');
}
我似乎找不到他在哪里得到“验证”这个词
答案 0 :(得分:2)
应用程序中的每个控制器都扩展了基础控制器Controller
或AppController
,扩展了Controller
Controller
有很多方法,其中一种方法是loadComponent()
(See Source)
public function loadComponent($name, array $config = [])
{
list(, $prop) = pluginSplit($name);
$this->{$prop} = $this->components()->load($name, $config);
}
为什么要验证而不是ValidateComponent?
简答:后缀。
See predefined suffix in App class
CakePHP使用后缀加载类,当你点击loadComponent()
时你去ComponentRegistery类来注册组件,ComponentRegistery将调用App类来加载类。 __loadClass()
CakePHP中的几乎所有内容都有一个后缀,在你的情况下,ValidateComponent有Component
后缀。
return App::className($class, 'Controller/Component', 'Component');
(Source)
我希望这对你更有意义
答案 1 :(得分:1)
$这并不特别与蛋糕有关,而是PHP本身的一部分。在面向对象的上下文中,$ this仅指当前类。
$ this-&gt;某事指的是当前范围内的一个对象。这可以在当前类中,也可以在扩展或使用中。
$这 - &GT;东西();类似地指当前范围内的方法或功能。
如果使用诸如netbeans之类的IDE,您通常可以单击这些引用来查看它们引用的对象,例如,如果您确实使用Netbeans,则可以按住Ctrl键单击$ this-&gt; loadComponent(&# 39;验证&#39);看它所指的实际功能。
关于何处进行验证&#39;来自,它是你传递给那个对象的一个字符串。另一方面,它将在函数中使用,可能在switch或if语句中返回一些东西。
例如:
Public function loadComponent($type){
If($type == 'Validation'){
//do something
}
}