2 votes

Zend - modification du chemin de l'URL de l'image pour le déploiement

Le titre peut prêter à confusion, car je ne suis pas sûr de savoir comment l'expliquer. Je suis sûr qu'il s'agit d'une solution assez simple.

Je transfère toutes mes images statiques, css, js sur S3 - elles sont donc accessibles via

Egs :

http://files.xyz.com/images/logo.gif
http://files.xyz.com/images/submit\_button.gif
http://files.xyz.com/style/style.css
http://files.xyz.com/js/jquery.js

files.xyz.com est un CNAME pointant vers files.xyz.com.s3.amazonaws.com

Maintenant, dans ma présentation et mes vues Zend, j'y accède avec l'URL complète egs

<img src="http://files.xyz.com/images/logo.gif"/>

Mon problème est que lorsque je teste sur localhost, je ne veux pas que les données soient extraites de S3 mais de mon disque dur local.

Je veux donc faire quelque chose comme ça. Dans mon application.ini - je devrais pouvoir spécifier

resources.frontController.imageUrl = http://localhost

Et lors du déploiement, il suffit de changer cela en

resources.frontController.imageUrl = http://files.xyz.com
    And access it in the view like
<img src="<?php echo $this->imageUrl;?>/images/logo.gif"/>

Quelle est la meilleure approche pour traiter ce problème ? Merci d'avance

3voto

Venu Points 5020

Créer une aide à la visualisation

public function imageUrl()
    {
        $config = Zend_Registry::get('config');
        if($config->s3->enabled){
            return $config->s3->rootPath; 
        }else{
            return $this->view->baseUrl(); 
        }
    }

Dans appilication.ini

s3.enabled        = 1
s3.rootPath       = https://xxxxx.s3.amazonaws.com

Vous pouvez appeler comme suit

<img src="<?php echo $this->imageUrl();?>/images/logo.gif"/>

Vous pouvez donc activer/désactiver le S3 facilement.

0voto

Eugene M Points 800

Essayez le aide à la visualisation de baseUrl . Spécifiez l'URL dans votre application.ini comme suit :

[production]
resources.frontController.baseUrl = "http://files.xyz.com"

Ensuite, dans vos opinions :

<img src="<?php echo $this->baseUrl('images/someimage.jpg'); ?>">

0voto

David Weinraub Points 11685

En supposant que vous définissiez votre APPLICATION_ENV et en utilisant des sections spécifiques à l'environnement dans votre application/configs/application.ini alors une combinaison de votre idée et de l'idée de l'aide à la visualisation semble être la voie à suivre.

En application/configs/application.ini :

[production]

cdn.baseUrl = "http://files.zyz.com"

[development]

cdn.baseUrl = "http://mylocalvirtualhost/assets/img"

Puis une aide à la visualisation :

class My_View_Helper_CdnBaseUrl extends Zend_View_Helper_Abstract
{
    protected static $defaultBase = '';

    protected $base;

    public function cdnBaseUrl($file = '')
    {
        return rtrim($this->getBase(), '/') . '/' . ltrim($file, '/');
    }

    public static function setDefaultBase($base)
    {
        self::$defaultBase = $base;
    }

    protected function getBase()
    {
        if (null === $this->base){
            $this->base = self::$defaultBase;
        }
        return $this->base;
    }
}

En application/Bootstrap.php :

protected function _initCdn()
{
    $options = $this->getOptions();
    My_View_Helper_CdnBaseUrl::setDefaultBase($options['cdn']['baseUrl']);
}

L'utilisation de Thenm dans une vue-script est la suivante :

<img src="<?= $this->cdnBaseUrl('root/relative/path/to/img.jpg') ?>" alt="Some image">

Bien entendu, vous devrez ajouter autloadernamespaces et les chemins de préfixe de l'aide à la visualisation pour correspondre à votre propre espacement des noms, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X