CakePHP $this Syntax



我已经尝试学习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');
}

我似乎找不到他从哪里得到"验证"

应用程序中的每个控制器都扩展了基本控制器ControllerAppController,该控制器扩展了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
    }
}

相关内容

最新更新