Je travaille avec l'API Instagram dans magento. Je donne des coupons à mes abonnés Instagram s'ils suivent notre boutique sur Instagram.
Je fais des appels API à instagram en PHP en utilisant curl. Actuellement, j'encapsule les appels d'API dans des fonctions d'assistance à l'intérieur de mon module personnalisé. Dois-je plutôt encapsuler ces appels dans une fonction à l'intérieur d'un modèle?
Par exemple. Je fais un appel API à Instagram pour déterminer si l'utilisateur actuel suit mon compte. Donc, dans mon contrôleur, je fais un appel à ma fonction d'assistance qui renvoie l'état de suivi à mon contrôleur. Dans mon contrôleur, je mettrai ensuite à jour mes modèles si nécessaire.
Ai-je raison de placer ces appels d'API dans des fonctions d'assistance? Quand dois-je utiliser des aides par opposition aux modèles?
<?php
class Company_SocialCoupons_InstagramController extends Mage_Core_Controller_Front_Action
{
public function followAction() {
$status = Mage::helper('socialcoupons/instagram')->getFollow();
if ($status == 'follows') {
// 1. ADD DATA TO MY DATABASE using my custom model
// - Ex. Mage::getModel('socialcoupons/instagram')->setInstagramId(*IGID*), etc.
// 2. CREATE COUPON
// 3. EMAIL COUPON TO CUSTOMER
}
}
class Company_SocialCoupons_Helper_Instagram extends Mage_Core_Helper_Abstract
{
public function getfollow() {
$accessToken = $this->getAccessToken();
$relationshipsUrl = 'https://api.instagram.com/v1/users/' . $this->getUserId() . '/relationship?access_token=' . $accessToken;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $relationshipsUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$jsonData = curl_exec($ch);
curl_close($ch);
$response = json_decode($jsonData, true);
$status = $response['data']['outgoing_status'];
return $status;
}
public function generateAccessToken($code) {
// exchange code for access token
$accessTokenUrl = 'https://api.instagram.com/oauth/access_token';
$data = array(
'client_id' => $this->getClientId(),
'client_secret' => $this->getClientSecret(),
'code' => $code,
'grant_type' => 'authorization_code',
'redirect_uri' => $this->getRedirectUri()
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $accessTokenUrl);
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$jsonData = curl_exec($ch);
curl_close($ch);
$response = json_decode($jsonData, true);
if (isset($response['error_type'])) { // no error
Mage::getSingleton('core/session')->unsInstagramAccessToken();
Mage::getSingleton('core/session')->addError($response['error_message']);
return $this->_redirect('*/*/authorize');
}
$accessToken = $response['access_token'];
$id = $response['user']['id'];
$username = $response['user']['username'];
Mage::getSingleton('core/session')->setInstagramAccessToken($accessToken);
return array(
'id' => $id,
'username' => $username
);
}
}
la source
Je dirais qu'il est plus adapté à un modèle, car son objectif principal est d'accéder aux données et de les représenter.
la source
Modèle:
Assistant:
S'il a un ÉTAT INTERNE, c'est un modèle. Si ce n'est pas le cas, c'est une aide avec toutes les fonctions mathématiques correctes, comme
sin(x)
oustr_tolower($text)
. Un modèle a un état interne qu'un Helper obtient est un état injecté en tant que dépendance.la source
Si les méthodes sont utilisées par de nombreuses classes (blocs / modèles / contrôleurs) et communes à plusieurs modèles, alors une aide est le choix évident.
Si les méthodes ne sont utilisées que lorsqu'un seul modèle est instancié, alors au sein de ce modèle se trouve le bon endroit.
la source