【问题标题】:How can I use my own external class in CakePHP 3.0?如何在 CakePHP 3.0 中使用我自己的外部类?
【发布时间】:2015-02-14 17:31:56
【问题描述】:

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

更具体地说:

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

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

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

【问题讨论】:

  • 嗨,乔恩,欢迎来到 Stack Overflow!这个问题可能很接近,因为您没有特定的编程问题,但我想为您指出正确的方向。首先,Cake 3.0 使用 PSR-4 自动加载,所以这是一个很好的起点。此外,您还阅读了Cake's MVC conventions and layers 以决定您的班级可能属于哪里。或create your own PSR-4 包并将其加载到 Cake 中的某个位置(在适当的层中可能是最好的)。

标签: php cakephp cakephp-3.0


【解决方案1】:

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

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

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

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

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

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

a) 包括:

require_once(ROOT .DS. '供应商' . DS . 'MyClass' . DS . 'MyClass.php');

(将 MyClass 替换为您的文件夹名称,将 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;
     }
    

【讨论】:

  • 这是一个非常好的答案!它完全解决了我的问题,并且没有什么可怀疑的。这应该以某种方式添加到 CakePHP 手册中,如果我采取其中的一部分并在 CakePHP 3.0 手册上提出拉取请求可以吗?无论如何,谢谢你! =)
  • 我正在使用这种方法并且它工作正常但我还有一个问题实际上我有一个类作为 Myclass 并且它扩展了核心 php 中的第二个类我只包含文件而不是扩展类因为那是抽象的,但我不知道如何在 cakephp 中使用它
  • 很好的答案,他们确实应该添加。
  • 我将供应商视为不包含在应用程序实际来源中的第 3 方。这样您就可以使用 Composer 部署您的代码。如果您想维护您的第 3 方代码并由 Composer 维护,我认为这是一个很好的解决方案。否则我会建议将小类合并到蛋糕组件中。这是附加自定义类或代码以与控制器一起使用的更简单的方法。 book.cakephp.org/3.0/en/controllers/…
  • 此方法在部署或 git 推送时会出现问题,因为供应商被忽略?不是吗?
猜你喜欢
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 2012-01-31
  • 1970-01-01
相关资源
最近更新 更多