2012-06-24 3 views
1

У меня возникли проблемы с пониманием ключевой концепции Symfony 2.Где помещать сущности «вспомогательные функции»?

Я работаю на веб-сайте, где пользователи могут создавать контент, который затем может быть отправлен другим людям с использованием секретного URL-адреса. Что-то вроде www.yoursite.com/{secret-identifier-string}.

я планирую делать это следующим образом:

  • Упорство содержание пользователя.
  • Создайте строку идентификатора, содержащую идентификатор содержимого и временную метку создания (или любое другое содержимое, которое никогда не будет изменяться снова, в качестве дополнительной функции безопасности) с использованием метода двустороннего шифрования (например, mcrypt_encrypt).
  • Создайте ссылку и отобразите ее пользователю, чтобы отдать ее
  • Всякий раз, когда вызывается URL-адрес, строка идентификатора будет расшифрована. Если предоставленная временная метка соответствует соответствующему значению строки идентификатора содержимого, страница будет отображаться.

Мои вопросы:

  • Считаете ли вы это хорошая процедура в целом?
  • Внешний вид Symfony2 Я бы создал вспомогательные методы, такие как getIdentifierString() и getContentPageLink(). Где я могу поместить соответствующий код в Symfony2? Он входит в класс сущности? Если это так, у меня возникают проблемы, потому что я использую класс сервиса для шифрования. Услуга доступна только в контроллере.

Большое спасибо!

+0

ли идентификатор должен быть двухстороннее зашифрованную строку с? Почему бы просто не создать длинную случайную строку (односторонний хэш содержимого даже) и сохранить это как индекс? В чем причина/преимущество шифрования и дешифрования идентификатора и метки времени? – MDrollette

+0

Я вижу преимущество в том, что вы не генерируете ненужные данные, которые должны храниться в базе данных. – sprain

ответ

1

Общая идея заключается в том, что вы создаете «вспомогательные классы», а не «вспомогательные функции». Эти классы могут иметь зависимости от других классов, и в этом случае вы будете определять их как службу.

Похоже, что ваши методы имеют зависимости (при шифровании), поэтому вы можете создать новую службу, которая отвечает за создание ссылок. В его конструкторе потребуется шифр, и методы будут переданы сущности для создания ссылки/строки.

, например, к вашим услугам:

<service id="app_core.linkifier" class="App\CoreBundle\Linkifier"> 
    <argument type="service" id="the.id.for.encryptor"/> 
</service> 

и класс:

class Linkifier 
{ 
    private $encryptor; 

    public function __construct(Encryptor $encryptor) 
    { 
     $this->encryptor = $encryptor; 
    } 

    public function generateContentPageLink(Entity $the_entity) 
    { 
     return $this->encryptor->encrypt($the_entity); 
    } 
} 
Смежные вопросы