Я работаю с Instagram API в magento. Я даю купоны своим подписчикам в Instagram, если они следят за нашим магазином в Instagram.
Я делаю вызовы API для Instagram в PHP с помощью curl. В настоящее время я обертываю вызовы API во вспомогательные функции внутри моего пользовательского модуля. Должен ли я вместо этого обернуть эти вызовы в функцию внутри модели?
Например. Я делаю вызов API в Instagram, чтобы определить, следует ли текущий пользователь моей учетной записи. Таким образом, в моем контроллере я выполняю вызов моей вспомогательной функции, которая возвращает статус отслеживания моему контроллеру. В моем контроллере я буду обновлять мои модели, если это необходимо.
Правильно ли я помещаю эти вызовы API во вспомогательные функции? Когда я использую помощников в отличие от моделей?
<?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
);
}
}
источник
Я бы сказал, что она больше подходит для модели, поскольку ее основная цель - доступ к данным и их представление.
источник
Модель:
Helper:
Если у него есть ВНУТРЕННЕЕ СОСТОЯНИЕ, то это модель. Если это не так, это помощник со всеми математически правильными функциями, такими как
sin(x)
илиstr_tolower($text)
. Модель имеет внутреннее состояние, которое получает Помощник, - это состояние, введенное в качестве зависимости.источник
Если методы используются многими классами (блоками / моделями / контроллерами) и являются общими для нескольких моделей, то очевидным выбором является помощник.
Если методы когда-либо используются только тогда, когда создается единственная модель, то внутри этой модели находится правильное место.
источник