2016-03-03 53 views
0

我正在嘗試使用symfony設置訂閱網站。我希望能夠向ROLE_USER的用戶免費提供3篇文章,但如果他們想要查看更多文章,則可以將它們定向到訂閱選項。我無法弄清楚如何在安全系統中實現這一點。使用symfony3訂閱模型

我懷疑我需要一個自定義選民。這是我應該看的路線嗎?那麼也許還有一個自定義的access.denied.handler。

我大多不確定如何使用選民來實現這一點。這是要走的路嗎?

+1

也許不是答案你正在尋找,但我建議你先編碼你的網站,更好地瞭解Symfony。稍後實施此功能,您將知道該怎麼做。這是使用框架的美妙之處,尤其是。 Symfony,因爲事情已經解耦,你可以隨時添加到你的堆棧,或者返回並輕鬆更改。 –

+0

@Marquis泰勒 - 你看到我的答案了嗎? –

回答

2

如果他們需要登錄(當你談論角色,那麼他們可能需要),那麼你可以做到這一點,請求listener和每增加一篇文章頁面的免費文章的數量遞減(或者如果你想允許刷新文章頁面時不會再觸及限制,那麼您將需要爲用戶閱讀文章實現一些存儲,並在用戶打開3篇不同文章後禁用自由閱讀)。

您需要實現請求事件監聽器(閱讀更多關於此事件:http://symfony.com/doc/current/components/http_kernel/introduction.html#the-kernel-request-event):

<?php 


namespace App\AppBundle\EventListener; 

use Symfony\Component\HttpKernel\Event\GetResponseEvent; 
use Symfony\Component\HttpKernel\HttpKernelInterface; 

class FreeReadingListener 
{ 
    /** 
    * @param GetResponseEvent $event 
    */ 
    public function onKernelRequest(GetResponseEvent $event) 
    { 
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) { 
      // don't do anything if it's not the master request 
      return; 
     } 

     // check if loaded route is article route 
     // check if user can read articles for free (can be as some kind flag) - if can't then redirect to subscriptions page 
     // log user article read 
     // if user used limit - switch free reading flag on user 
    } 
} 

services.yml

services: 
    app_bundle.listener.free_reading: 
     class: App\AppBundle\EventListener\FreeReadingListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } 

監聽文檔:http://symfony.com/doc/current/cookbook/event_dispatcher/event_listener.html