如何在CakePHP 3.0中使用我自己的外部类


How can I use my own external class in CakePHP 3.0?

我正在CakePHP 3.0中创建一个应用程序,在这个应用程序中,我想使用我编写的php类绘制数据的SVG图。在我的CakePHP3项目中使用这个类的正确方法是什么?

更具体地说:

  • 命名约定是什么?我需要使用特定的命名空间吗?

  • 我应该把包含PHP类的文件放在哪里?

  • 如何在控制器或视图中包含它并使用它?

有哪些命名约定?我需要使用特定的命名空间吗

SVG图形类应该有一个名称空间。对于命名空间,您可以看到http://php.net/manual/en/language.namespaces.rationale.php

我应该把包含PHP类的文件放在哪里

  1. 在供应商中按作者(这里可能是你的名字,因为你是作者)创建一个文件夹

  2. 然后在里面创建你的类约定为vendor/$author/$package。你可以阅读更多http://book.cakephp.org/3.0/en/core-libraries/app.html#loading-供应商文件

如何将其包含并在控制器或视图中使用

a)包括:

require_one(ROOT.DS.'Vendor'.DS.'MyClass'.DS.'MyClass.php');

(将MyClass替换为foldername,将MyClass.php替换为filename.php)

b)要使用它:

在控制器中添加use MyClass'MyClass;

例如我想在控制器中添加MyClass。对我有效的步骤

  1. 正在创建vendor ''MyClass文件夹
  2. 将MyClass.php粘贴到该文件夹中
  3. 在MyClass.php的顶部添加namespace MyClass;

例如,MyClass.php有以下代码:

namespace MyClass;

class MyClass
{
    public $prop1 = "I'm a class property!";
    public function setProperty($newval)
    {
        $this->prop1 = $newval;
    }
    public function getProperty()
    {
        return $this->prop1 . "<br />";
    }
}
  1. 在控制器顶部添加use MyClass'MyClass;

  2. 然后将其包含在我的控制器操作中。我的行动样本

       public function test()
     {
         require_once(ROOT .DS. "Vendor" . DS  . "MyClass" . DS . "MyClass.php");
         $obj = new MyClass;
         $obj2 = new MyClass;
         echo $obj->getProperty();
         echo $obj2->getProperty();
         exit;
     }