如何使用Zend的服务亚马逊?(How to use Zend Service Amazon?)

2019-08-01 15:11发布

我一直在做挖周围的很多,已经结束了一个巨大的头痛,没有成功。 我试图使用Zend亚马逊服务(我框架内)以获取有关使用其ISBN一本书的信息。 我开始与Zend 1.12尝试过,但我一直得到有关失踪参数AssociateTag错误。 我现在与Zend 2.0努力,但仍然得到问题。

这是我用我的控制器中的代码:

    set_include_path(get_include_path() . PATH_SEPARATOR . 'site/libraries');
    require_once 'Zend2/Loader/StandardAutoloader.php';
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $amazon = new Zend_Service_Amazon('[apikey]', 'US', '[secretkey]');
    $item = $amazon->itemLookup('B0000A432X');

我得到以下错误:

致命错误:类'Zend_Loader_Autoloader找不到。

我的问题是:

  • 如何加载正确的自动加载磁带机?
  • 我在哪里包括在参数标签关联? 还有就是过时的zend的用户手册中没有提到它
  • Zend的2.0甚至不似乎有亚马逊的服务文件,甚至不/服务的文件夹。 这是什么意思?

Answer 1:

注:包含zendservice,亚马逊不工作作为为演示。 要求必须包括你的App ID,密钥,和准标签,该标签演示脚本默认情况下不会做的。 我花了一段时间来弄清楚这一点,如果没有这些,所有的疑问抛出一个异常,称该HTTP响应状态是400。不幸的是,除了没有响应主体它说参数失踪。

下面是一些代码,将让你开始ZF2和ZendService\Amazon

首先,我来大概介绍,我将会把文件在这个例子中的目录结构:

testing
|-Zend
|---Crypt
|---Escaper
|---Http 
|---I18n
|---Loader
|----+AutoloaderFactory.php
|----+... more files
|----+StandardAutoloader.php
|-----Exception
|---Stdlib
|---Uri
|---Validator
|-ZendRest
|-ZendService
|---Amazon
|-----Authentication
|-------Exception
|-----Ec2
|-------Exception
|-----Exception
|-----S3
|-------Exception
|-----SimpleDb
|-------Exception
|-----Sqs
|-------Exception
|----+AbstractAmazon.php
|----+...more files
|----+SimilarProduct.php
|-+test.php

要点是我创建了一个目录中称为testing ,我们将放置ZF2自动加载磁带机以及亚马逊类和它们的依赖关系。 在测试是一个Zend ,包含自动加载(文件夹Loader ),也是一个ZendService其中文件夹Amazon服务出现。

首先,我们需要从ZF2获得自动加载机的副本。 你是有问题的部分原因是因为它看起来像你使用的是ZF1自动加载它与ZF2不兼容。 为了从ZF2磁带自动加载机,您可以下载最新的ZF2包和复制Loader从目录ZendFramework-2.0.x/library/Zend/Zend文件夹,我们在创建的testing目录。

现在,我们有自动加载磁带机的文件,让我们抓住亚马逊的服务文件。 我会写关于如何使用Composer来获取最新的软件包了详细的解答,但现在我会解释如何手动得到它。 要获取可用ZF2包的完整列表,在加载了JSON文件http://packages.zendframework.com/packages.json找到它, zendframework/zendservice-amazon ,确定从列表中可用的最高版本,并抢相应的DIST。 编辑随着2013年7月11日,这是最新的zendservice-亚马逊包。

library目录ZendService_Amazon-2.0.2.zip ,复制整个ZendService目录复制到testing目录。 您现在有ZF2亚马逊服务文件。

接下来,我们取依赖护理。 从ZF2库,复制目录, CryptEscaperHttpI18nJsonStdlibUriValidatorZend目录里面testing

您还需要ZendRest包。 复制ZendRest从文件夹library从ZendRest封装testing/ZendRest

现在的一些代码。 创建test.php内部testing包含以下内容的文件夹:

<?php

require_once './Zend/Loader/StandardAutoloader.php';

$autoloader = new Zend\Loader\StandardAutoloader(array(
    'namespaces' => array(
        'Zend'        => dirname(__FILE__) . '/Zend',
        'ZendRest'    => dirname(__FILE__) . '/ZendRest',
        'ZendService' => dirname(__FILE__) . '/ZendService',
     ),
     'fallback_autoloader' => true));

$autoloader->register();

$tag       = 'prdesign-20'; // replace with your Amazon app ID
$appId     = '1JT2V3QNEHDAMKYR5F02'; // replace w/ your access key from https://portal.aws.amazon.com/gp/aws/securityCredentials
$secretKey = 'Qgjeiw39f8UNzjJgeerrgDs1a193du/v7djDAtn/x';

$query  = new ZendService\Amazon\Query($appId, 'US', $secretKey);
$query->Category('Books')->Keywords('PHP')->AssociateTag($tag);
$result = $query->search();

foreach($result as $item): ?>
<div class="item">
  <a href="<?php echo $item->DetailPageURL ?>" target="_blank"><?php echo $item->Title ?></a>
  by <?php if (is_array($item->Author)): ?>
  <?php echo implode(', ', $item->Author) ?>
  <?php else: ?>
  <?php echo $item->Author ?>
  <?php endif; ?>
</div>
<?php endforeach; ?>

首先,我们require_onceStandardAutoloader从ZF2类。 一旦磁带自动加载机注册,这是你必须手动包括唯一的类。

接下来,我们创建一个新的自动加载磁带机,并通过一些选项。 这告诉那里的命名空间的类自动加载磁带机ZendZendService所在。 我们告诉他们生活在我们的当前目录下的相应文件夹中自动加载机。 更改dirname(__FILE__)根据需要正确的路径。 该fallback_autoloader选项告诉自动加载磁带机,以寻找在任何命名空间或供应商的类别include_path

调用$autoloader->register(); 那么实际上我们登记在PHP中设置了自动加载。 设置自动加载磁带机现在已完成。

在接下来的3行定义为API一些所需的参数。

接下来的3行很简单,我们现在创造的新实例ZendService\Amazon\Query并通过我们的亚马逊的应用程序ID和密钥。 然后,我们通过指定图书搜索构建查询Category ,并设置Keywords是PHP。 我们还添加所需的AssociateTag。 最后,我们执行搜索。

还没有使用ZendService\Amazon尚未所以我不能使用的类提供详细的说明,但所包含的演示脚本应该让你开始与发送基本查询到亚马逊和处理结果。

希望帮助。



Answer 2:

我有使用Amazon AWS S3存储与Zend框架一起。 一个简单的例子是照片上传到亚马逊AWS Bucket.In你application/config/application.ini文件

;AWSAccessKeyId= "AccessKey"
;AWSSecretKey= "SecretKey"
;AWSS3BucketName = "zoshare-images"
;AWSS3GetImageUrl = "http://[name].s3.amazonaws.com/[folder]/"

比方说,你要上传的图像斗,下面是控制器的示例代码

public function updateAction()
    {
if($_FILES["fuPic"]["size"] > 0 || $_FILES["fuPre"]["size"] > 0)
        {
            $config = Zend_Registry::get('config');

            $s3 = new Zend_Service_Amazon_S3($config['AWSAccessKeyId'],$config['AWSSecretKey']);

            $bucketName =  $config['AWSS3BucketName'];

            if($_FILES["fuPic"]["size"] == 0)
                unset($_FILES["fuPic"]);
            else if($_FILES["fuPre"]["size"] == 0)
                unset($_FILES["fuPre"]);

            $s3->removeObject($bucketName."/[folder]/".$campaignModel->getCampaignId().'_pic_'.$campaign_olddata->getPicture());
            $s3->removeObject($bucketName."/[folder]/".$campaignModel->getCampaignId().'_pre_'.$campaign_olddata->getPreview());


            if (isset($_FILES["fuPic"]))
            {
                $filename = $campaignModel->getCampaignId().'_pic_'.$_FILES["fuPic"]['name'];
                $s3->putObject($bucketName."/[folder]/".$filename, file_get_contents($_FILES["fuPic"]["tmp_name"]),
                    array(Zend_Service_Amazon_S3::S3_ACL_HEADER =>
                    Zend_Service_Amazon_S3::S3_ACL_PUBLIC_READ));
                $data['picture'] = $_FILES["fuPic"]['name'];
            }

            if (isset($_FILES["fuPre"]))
            {
                $filename = $campaignModel->getCampaignId().'_pre_'.$_FILES["fuPre"]['name'];
                $s3->putObject($bucketName."/[folder]/".$filename, file_get_contents($_FILES["fuPre"]["tmp_name"]),
                    array(Zend_Service_Amazon_S3::S3_ACL_HEADER =>
                    Zend_Service_Amazon_S3::S3_ACL_PUBLIC_READ));
                $data['preview'] = $_FILES["fuPre"]['name'];
            }
        }
}

编码愉快!!!!



文章来源: How to use Zend Service Amazon?