我已经尝试学习CakePHP已有一段时间了,但我仍然无法得到很多东西。我一直在看很多东西,看视频。我只想问一个非常简单的问题。
我一直在试图弄乱书签教程,并且正在观看视频。在视频中,他烤了一个称为validate的组件。在CMD中,他键入
bin/cake/bake component Validate
然后,在控制器的组件文件夹中出现了valialatecomponent.php。现在,他通过转到bookmarkscontroller并添加到初始化方法
来使用valialatecomponent.php$this->loadComponent('Validate');
我只想问验证一词来自何处?它不应该是valialatecomponent吗?他从哪里获得LoadComponent?我已经看到他使用$this->method();
或$this->method('string', [array]);
,我只想知道语法是如何工作的以及每个单词的含义。对不起,很长的解释。我真的在尝试学习,我真的很困惑。非常感谢。
validatecomponent.php
<?php
namespace AppControllerComponent;
use CakeControllerComponent;
use CakeControllerComponentRegistry;
/**
* 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');
}
我似乎找不到他从哪里得到"验证"
应用程序中的每个控制器都扩展了基本控制器Controller
或AppController
,该控制器扩展了Controller
Controller
有很多方法,其中一种方法是loadComponent()
(请参阅源)
public function loadComponent($name, array $config = [])
{
list(, $prop) = pluginSplit($name);
$this->{$prop} = $this->components()->load($name, $config);
}
为什么要验证而不是ValidateComponent?
简短答案:后缀。
请参阅App类中的预定义后缀
cakephp使用后缀来加载类,当您击中loadComponent()
时,您可以转到ComponentRegistery类以注册组件,ComponentRegistery将调用App Class class class class类。__loadClass()
CakePHP中的几乎所有内容都有后缀,在您的情况下,ValidateComponent具有Component
后缀。
return App::className($class, 'Controller/Component', 'Component');
(源)
我希望这对您更有意义
$这不是蛋糕本身的一部分。在面向对象的上下文中,$此只是指当前类。
$ this->某物是指当前范围内的对象。这可以在当前类中,也可以来自扩展或使用。
$ this-> someings();与当前范围内的方法或功能相似。
如果使用了诸如NetBeans之类的IDE,您通常可以单击这些引用以查看它们所指的对象,例如,如果您确实使用NetBeans,则可以在$ this-> loadComponent上ctrl ctrl cctrl-click('validate'');查看其指的实际功能。
关于"验证"来自何处,这是您传递给该对象的字符串。在另一端,它将用于函数,可能是在开关或if语句中用于返回某些内容。
eg:
Public function loadComponent($type){
If($type == 'Validation'){
//do something
}
}