Как я могу использовать свой собственный внешний класс в CakePHP 3.0?

Я создаю приложение в CakePHP 3.0, в этом приложении я хочу нарисовать SVG-графики данных, используя класс php, который я написал. Каким будет подходящий способ использования этого класса в моем проекте CakePHP 3?

Более конкретно:

  • Каковы соглашения об именах? Нужно ли использовать определенное пространство имен?

  • Где я могу поместить файл, содержащий класс PHP?

  • Как включить его и использовать его в контроллере или в представлении?

Ответ 1

Каковы соглашения об именах? Нужно ли использовать определенное пространство имен?

У вашего класса SVG-графов должны быть пространства имен. Для пространств имен вы можете видеть http://php.net/manual/en/language.namespaces.rationale.php

Где я могу поместить файл, содержащий класс PHP?

  • Создайте папку по автору (здесь может быть ваше имя, поскольку вы являетесь автором) в поставщике

  • Затем создайте свой класс внутри него соглашение - это поставщик /$author/$package. Вы можете прочитать больше http://book.cakephp.org/3.0/en/core-libraries/app.html#loading-vendor-files

Как включить его и использовать его в контроллере или в представлении?

a) Включить:

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

(замените MyClass на имя вашей папки и MyClass.php на файл filename.php)

b) Чтобы использовать его:

добавить use MyClass\MyClass; в контроллер

Например Я хочу добавить MyClass в контроллер. Шаги, которые работали для меня

  • Создание папки поставщика \MyClass
  • Вставка MyClass.php в этой папке
  • добавление namespace MyClass; вверху MyClass.php

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;
     }