【问题标题】:How to integrate in Laravel 5 a Package from Packagist?如何在 Laravel 5 中集成来自 Packagist 的包?
【发布时间】:2015-08-06 14:56:13
【问题描述】:

我正在使用 laravel 5 并尝试集成以下软件包: 精确目标/fuel-sdk-php

我执行了我的项目:

composer require exacttarget/fuel-sdk-php

所以我在我的供应商目录中找到了确切的目标提供者。

首先我注意到这个特定的包不使用命名空间,所以它仍然调用 require 指令而不是“使用 \path\namespace” 这是一个正确的方法吗?我还没有看到很多包,但在我过去的经验中,我认为编写包的方法并不正确......

在此之后我编辑 condif/app.php 以使用 ET_Client 类。

 'providers' => [
 ...
 'ET_Client',
 ...

],

一旦我这样做了,我得到了一个错误:看起来 Laravel frmwk 试图实例化这个类,它需要一些参数才能工作,即使我还没有使用它(istantiating)。这是 Laravel 的正常行为吗?

我错过了什么吗?

【问题讨论】:

  • 看包,是不是FuelPHP框架的SDK,而不是Laravel?
  • 谢谢 Martin,但是我在哪里可以检查 packagegist 是否为特定框架制作了一个包?是不是只有分析代码才能理解?
  • 我不知道 ExtractTarget 是什么。 Fuel 是他们产品之一的名称吗?
  • 他们将FuelSDK称为他们的一堆类,以便与他们的REST服务交互......我认为这可能与FuelPHP无关

标签: laravel-5 packagist exacttarget


【解决方案1】:

providers 数组用于注册服务提供者类。除非 ET_Client 扩展了 Laravel 的基础 ServiceProvider 类,否则它不会工作。

当您需要使用该类时,只需将 use 语句添加到您的 PHP 类中即可:

<?php

namespace App\Http\Controllers;

use ET_Client;

class SomeController extends Controller
{
    public function someAction()
    {
        // Instantiate client class
        $client = new ET_Client;

        // Now do something with it...
    }
}

【讨论】:

  • 这就是我想的解决方案,但是因为我有很多类。必须列出我需要在每个控制器中使用的所有类不会很好......我希望我可以让它们命名空间和然后调用:使用 MyNamespace...
  • 不幸的是,您受制于第三方。如果他们没有为他们的 SDK 命名空间,那么你就无能为力了。也许联系他们并要求他们命名空间呢?命名空间已经出现了很长时间,现在很常用。
  • 也许我会去重写它命名空间。只是你的另一个提示。如果现在我使用名称空间重写所有内容。我不需要从 ServiceProvider 继承,然后将其注册到 config/app.php,这不是强制性的。我也可以简单地命名它,然后在我的控制器中使用命名空间。对?还是您认为 Serviceprovider 方式在 Laravel 样式视图中会更优雅?
  • 我不确定我是否关注?你是什​​么意思必须从ServiceProvider继承?如果你正在编写一个 Laravel 服务提供者类,那么它需要扩展抽象类,是的。
  • 我有这个库“fuelSDK”,它基本上似乎不遵循 PSR 规则,也不是为了轻松集成到 laravel 中而编写的。即使它在 packagist 上并且有它的 composer.json 文件。问题是......我有一堆类一起工作,一个库,这是将它集成到 Laravel 5 并自动加载或使用它的最佳方法?希望我很清楚。谢谢
猜你喜欢
  • 2016-01-01
  • 2013-06-04
  • 2015-09-15
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
相关资源
最近更新 更多