如何在CakePHP 3x中导入供应商文件

如何在CakePHP 3x中导入供应商文件,cakephp,vendor,cakephp-3.0,Cakephp,Vendor,Cakephp 3.0,我正在使用最近发布的CakePHP3(beta 2)版本。我需要使用PHPSDK集成Facebook登录,我不清楚在这个版本中导入供应商文件 在CakePHP2X中,我使用了 App::import('Vendor', 'Facebook', array('file' => 'Facebook' . DS . 'src'. DS. 'facebook.php')); 因此,我需要在CakePHP 3x中复制相同的内容(我没有使用composer)。 是否有此参考?如果composer不是

我正在使用最近发布的CakePHP3(beta 2)版本。我需要使用PHPSDK集成Facebook登录,我不清楚在这个版本中导入供应商文件
在CakePHP2X中,我使用了

App::import('Vendor', 'Facebook', array('file' => 'Facebook' . DS . 'src'. DS. 'facebook.php'));
因此,我需要在CakePHP 3x中复制相同的内容(我没有使用composer)。

是否有此参考?

如果composer不是一个选项,您必须自己加载它。您可以始终使用非常基本的require方法,自己创建vendor类的新实例。参考:

使用:


Ayman B.提供的答案在我亲自尝试后,看起来不像问题中预期的那样完成工作,原因如下:

  • cakephp3中的供应商文件夹不在应用程序命名空间下的src文件夹中,它已移动到根文件夹中,这样您将无法按预期加载您的Facebook类,请自己尝试,您将看到结果
  • 通过加载供应商文件,如果供应商库不遵循以下规则(如PSR-0规则),则不会自动加载类名本身: \VENDOR\PACKAGE\TEST.CLASS.PHP,在TEST.CLASS.PHP中,没有必须在脚本开头使用定义的名称空间关键字在脚本中调用或导入的类定义,如下所示:名称空间 那么上面的代码就不起作用了
要更正答案,您必须执行以下几个步骤:

1-在bootstrap.php中定义一个新的cakephp常量,如下所示: 定义('VENDOR',ROOT.DS.'VENDOR'.DS);由于cakephp 3.x中删除了供应商constante,您可以自己定义它 2-之后,必须在供应商constante中指定供应商名称、包名称和类名,如: 定义(“”),然后可以执行$facebookApi=new\\()

这将如问题中所预期的那样对您有效


如果您有问题,请尝试与我联系,我将向您展示一个使用示例,如下所述…

在cakephp3中,要添加新的供应商库,您可以按照以下步骤操作:

  • 将库文件夹放在项目/供应商的
  • 使用
    require\u一次性(ROOT.DS.“vendor.DS.“my\u library\u folder.DS.“my\u library\u base\u class.php”)
    ,这包括我们代码中的库代码文件
  • 在控制器顶部包括类名,如:
  • namespace-App\Controller;
    使用MyLibraryBaseClass;
    ,

    这将导入要使用的命名空间中的库代码文件

  • 将加载类的对象创建为

    $my_obj=new MyLibraryBaseClass();


  • CakePHP3.0也有同样的问题

    按照说明使用Composer进行安装

    然后,您必须使用
    use
    语句在控制器中正确加载插件。如下所示:

    使用Ghunti\highchartshp\Highchart;

    • 如果在大多数页面中使用插件,而不是在每个控制器中加载插件,则可以在bootstrap.php文件中的其他use语句的正下方添加相同的行

    这将解决使用插件的问题。

    从CakePhp 3.x开始,推荐的代码标准是使用require_一次,不带括号“()”

    require_once(ROOT.'Folder'.DIRECTORY_SEPARATOR.'requiredfile.ph')

    变成

    require_once ROOT.'Folder'.DIRECTORY_SEPARATOR.'requiredfile.ph'


    希望这对将来的人有所帮助。

    我更喜欢你的评论方式,它提供了更多的上下文信息:)Lool:)同意。。。将其添加到answerAPP中,给出cakephp3的src文件夹的路径。而且“vendor”不再是“src”文件夹的子文件夹。因此require_once在您的代码中不起作用。您是对的@Dashrath我刚刚编辑了我的答案,并将其替换为ROOT我可以使用这个require_once(ROOT.“vendor/Facebook/src/Facebook.php”)?加上我的两分钱。理想情况下,应该使用Composer自动加载供应商文件,如果您有无法使用Composer自动加载或安装的供应商文件,则需要使用require来加载它们。因此,CakePHP-3.0应该接受@Ayman-b的答案。如果可能,最好使用Composer。对于您自己和其他需要保持所有依赖项最新的开发人员来说,生活会更轻松。如果这仍然不适合您,请尝试添加反斜杠,例如:
    $my_obj=new\MyLibraryBaseClass()。它向我显示了2个错误:1/PHP注意:在第6行的C:\xampp\htdocs\ProjectX\webroot\classX.PHP中使用了未定义的常量ROOT-假定为“ROOT”。2/注意:在第6行的C:\xampp\htdocs\ProjectX\webroot\classX.php中使用未定义的常量DS-假定为“DS”—这应该是答案!这不是问题的答案。如果这是对Ayman B答案的评论:你必须先获得50分的声誉才能留下评论。您可以通过提问或回答以下问题来提高声誉:。It show me错误:1/PHP注意:在第6行的C:\xampp\htdocs\ProjectX\webroot\classX.PHP中使用未定义的常量ROOT-假定为“ROOT”。
    
     //The following line should do the same like App::import() in the older version of cakePHP
     require_once(ROOT . 'vendor' . DS  . 'Facebook' . DS . 'src' . DS . 'facebook.php');
    
     $facebookApi = new facebook();