Ich arbeite mit der Instagram-API in Magento. Ich gebe meinen Instagram-Followern Gutscheine, wenn sie unserem Shop auf Instagram folgen.
Ich mache die API-Aufrufe von Instagram in PHP mit Curl. Derzeit verpacke ich die API-Aufrufe in Hilfsfunktionen in meinem benutzerdefinierten Modul. Sollte ich diese Aufrufe stattdessen in eine Funktion innerhalb eines Modells einschließen?
Zum Beispiel. Ich rufe Instagram bei einer API auf, um festzustellen, ob der aktuelle Benutzer meinem Konto folgt. In meinem Controller rufe ich meine Hilfsfunktion auf, die den Folgestatus an meinen Controller zurückgibt. In meinem Controller werde ich dann bei Bedarf meine Modelle aktualisieren.
Bin ich richtig darin, diese API-Aufrufe in Hilfsfunktionen einzufügen? Wann benutze ich Helfer im Gegensatz zu Modellen?
<?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
);
}
}}
quelle
Ich würde argumentieren, dass es besser für ein Modell geeignet ist, da sein Hauptzweck darin besteht, auf Daten zuzugreifen und diese darzustellen.
quelle
Modell:
Helfer:
Wenn es einen INTERNEN STAAT hat, ist es ein Modell. Wenn dies nicht der Fall ist, ist es ein Helfer mit allen mathematisch korrekten Funktionen wie
sin(x)
oderstr_tolower($text)
. Ein Modell hat einen internen Zustand, den ein Helfer als Abhängigkeit erhält.quelle
Wenn die Methoden von vielen Klassen (Blöcken / Modellen / Controllern) verwendet werden und mehreren Modellen gemeinsam sind, ist ein Helfer die naheliegende Wahl.
Wenn die Methoden immer nur verwendet werden, wenn ein einzelnes Modell instanziiert wird, ist innerhalb dieses Modells der richtige Ort.
quelle