我正在嘗試使用symfony設置訂閱網站。我希望能夠向ROLE_USER的用戶免費提供3篇文章,但如果他們想要查看更多文章,則可以將它們定向到訂閱選項。我無法弄清楚如何在安全系統中實現這一點。使用symfony3訂閱模型
我懷疑我需要一個自定義選民。這是我應該看的路線嗎?那麼也許還有一個自定義的access.denied.handler。
我大多不確定如何使用選民來實現這一點。這是要走的路嗎?
我正在嘗試使用symfony設置訂閱網站。我希望能夠向ROLE_USER的用戶免費提供3篇文章,但如果他們想要查看更多文章,則可以將它們定向到訂閱選項。我無法弄清楚如何在安全系統中實現這一點。使用symfony3訂閱模型
我懷疑我需要一個自定義選民。這是我應該看的路線嗎?那麼也許還有一個自定義的access.denied.handler。
我大多不確定如何使用選民來實現這一點。這是要走的路嗎?
如果他們需要登錄(當你談論角色,那麼他們可能需要),那麼你可以做到這一點,請求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
也許不是答案你正在尋找,但我建議你先編碼你的網站,更好地瞭解Symfony。稍後實施此功能,您將知道該怎麼做。這是使用框架的美妙之處,尤其是。 Symfony,因爲事情已經解耦,你可以隨時添加到你的堆棧,或者返回並輕鬆更改。 –
@Marquis泰勒 - 你看到我的答案了嗎? –