我創建了一個項目來顯示廣告。每個廣告都有一個位置。Zend Framework 2:Ho在Module.php中設置Cookie以訪問其他模塊
當前列表是否顯示廣告。我現在想要在我的layout.phtml
中找到位置列表,並在點擊廣告後進行過濾。
爲了實現這一點,我創建了一個名爲Geolocation的新模塊。然後我創建了兩個新的視圖助手;一個顯示所有位置,另一個顯示所選位置的名稱,該位置存儲在Cookie中。
當您點擊列表中的某個位置時,您將訪問對地理位置控制器的AJAX請求。控制器調用服務中的方法將位置存儲在cookie中。
我現在改變我的SQL查詢和存儲庫在我的廣告模塊接受的位置,如果它被設置:
public function countAdvertsByCategory($location=false)
通常情況下,我會在我的廣告控制器添加$location = $_COOKIE['ChosenCounty']
,但我相信有一個更好的方法。
我原以爲我可以在地理定位模塊的module.php
中加入這個。如果該模塊包含該變量,則將使用該cookie值設置$location
,否則它將被忽略。
這是正確的方法還是最佳實踐?我該怎麼做?
UPDATE
我現在已經改變了我廠:
namespace Application\Navigation;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class MyNavigationFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
// previous without Geolocation
$navigation = new MyNavigation();
return $navigation->createService($serviceLocator);
$location = $serviceLocator->get('Geolocation\Service\Geolocation');
$navigation = new MyNavigation($location);
return $navigation->createService($serviceLocator);
}
,但如果現在我刪除我的地理位置模塊,比工廠在我的應用程序模塊來創建我的導航會失敗,這意味着我的工廠現在依賴於我不想要的這個新模塊。我怎麼能避免這種情況?
感謝這麼創建一個新的
AdvertServiceFactory
,將提取和注入服務到AdvertService::__construct
很多爲您的答案。我會嘗試你的解決方案,但我不確定我會管理它,看看我已經構建了我的源代碼到目前爲止......所有非常混亂,我不得不承認它還沒有點擊。 – Luka我得到它的工作,但...看到我上面的更新 – Luka