Entendendo o Magento Registry

13

Eu sempre me perguntei, onde estão todos os dados do registro armazenados no Magento?

Eu sei que até objetos singleton são armazenados no registro. E o registro é apenas uma variável de matriz estática da classe Mage .

Tenho algumas perguntas aqui para esclarecer minha confusão:

  1. O registro é diferente para usuários diferentes? Quero dizer, ele é criado por usuário (por solicitação HTTP )?

Por exemplo,

Mage::register('foo', 'Hello World'); //set a value for foo
Mage::registry('foo'); //will this return hello world for all HTTP users ?
  1. Os dados do registro são armazenados em sessões? Caso contrário, como o Magento identificará qual usuário chamou os dados do registro?

Eu li o artigo do blog de Alan Storm e sua resposta no StackOverFlow sobre isso. Mas não consegui matar a confusão. Por favor, corrija-me Se você acha que meu básico está bagunçado. obrigado

Hashid
fonte
obrigado Amit Bera, eu estava lendo esse artigo e a resposta do SOF por Alan antes de postar esta pergunta. Eu não consegui minhas respostas de lá.
Hashid

Respostas:

23

O registro armazena dados na memória que é específico a essa solicitação (em vez de usuário ou qualquer outra coisa) e persiste apenas pela duração dessa solicitação. O princípio é realmente muito simples, a Mageclasse é instanciada como um objeto singleton para cada solicitação e o objeto Mage instanciado permanece na memória e é acessível em todas as classes (e modelos) até que a solicitação seja concluída e a resposta seja enviada.

Como o objeto é um singleton, sempre que você acessa, obtém o mesmo objeto. Tudo o que está acontecendo é que você está armazenando valores para esse objeto; portanto, quando uma classe armazena um valor e a outra acessa, eles estão trabalhando no mesmo objeto e a segunda classe é capaz de recuperar o valor definido pela primeira classe.

Jonathan Hussey
fonte
1
Então, está vivo apenas para UM pedido? Ou seja, se eu carregar uma página no Magento, uma solicitação é CONCLUÍDA e os dados do registro são liberados?
precisa
4
Sim, os valores configurados com Mage::register()persistem apenas para essa solicitação. Se você deseja armazenar dados específicos do usuário, use a sessão, o registro é realmente projetado apenas para tornar os dados portáteis entre as classes.
Jonathan Hussey
1
isso faz sentido! O mesmo se aplica à instância singleton também?
quer
1
Sim, exatamente o mesmo - se você observar o getSingleton()método da Mageclasse, ele realmente armazenará os dados no registro.
Jonathan Hussey
3

O registro é armazenado na memória e é por solicitação HTTP; portanto, você não pode compartilhar dados entre diferentes solicitações ou usuários.

Vladimir Kerkhoff
fonte
Mas como o Magento mapeará a solicitação e o registro HTTP?
Hashid
2

Magento Registry armazenado na memória do aplicativo .

sempre que o script é executado, o que você armazenou no registro se foi, portanto, não há necessidade de se preocupar em limpá-lo (a menos que o script que você está executando esteja armazenando objetos grandes no registro e esteja percorrendo muitas dados).

Nesse caso, é necessário cancelar o registro de suas entradas quando terminar.

o registro é apenas uma propriedade estática da classe Mage. veja para detalhes

mas ainda não consegui descobrir uma boa explicação

2) para cada usuário, haverá um registro separado por solicitação no servidor.

espero que isso fique pouco claro em sua mente

liyakat
fonte
obrigado liyakat. Eu li prattski.com/2014/09/23/using-the-magento-registry-mageregister antes de postar: P Mas como o Magento mapeará a variável e o usuário?
precisa
1
@Hashid, você também pode ter uma idéia melhor do blog de Alan. como o registro está trabalhando com cada solicitação no código a seguir. alanstorm.com/magento_registry_singleton_tutorial
liyakat
leia isso também :-)
Hashid