Это мой первый вопрос о переполнении стека, но я нашел здесь сотни замечательных ответов!
Во всяком случае: я создаю приложение в CakePHP 3.0, в этом приложении я хочу нарисовать SVG-графики данных, используя класс php, который я написал. Каким будет подходящий способ использовать этот класс в моем проекте CakePHP 3?
Более конкретно:
* Какие соглашения об именах? Нужно ли использовать определенное пространство имен?
* Где я могу поместить файл, содержащий класс PHP?
* Как я могу включить его и использовать его в контроллере или в представлении?
С наилучшими пожеланиями
Каковы соглашения об именах? Нужно ли использовать определенное пространство имен?
Класс 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 в контроллер. Шаги, которые работали для меня
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 />"; } }
Добавление use MyClass\MyClass;
наверху контроллера
Затем включите его в действие моего контроллера. Мой пример действия
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; }