2012-11-02 28 views
8

CHI TIẾTKhi nào tôi nên sử dụng setUserState trong Joomla?

Tôi có thể sử dụng biến trạng thái người dùng để lưu trữ và truy xuất dữ liệu trong các phiên Joomla.

VÍ DỤ đặt biến

$app =& JFactory::getApplication(); 
$app->setUserState('myvar', $myvarvalue); 

nhưng tôi cũng có thể lưu trữ và lấy biến trong phiên sử dụng JFactory/getSession.

VÍ DỤ đặt biến

$session =& JFactory::getSession(); 
$session->set('myvar', $myvarvalue); 

câu hỏi

sự khác biệt giữa hai phương pháp là gì? Khi nào tôi nên sử dụng cái kia?

Trả lời

8

Trong ngắn hạn: nó không phải là một sự khác biệt lớn và bạn có thể sử dụng bất cứ điều gì cảm thấy đúng trong bối cảnh. Tôi sẽ gắn bó với JApplication/setUserState bởi vì tôi nghĩ rằng mã sẽ tự giải thích tốt hơn.

Sự khác biệt thực tế:

Cả hai phương pháp này sẽ lưu trữ nhà nước quy định tại phiên. JApplication/setUserState thực tế sẽ sử dụng nội bộ JSession/set để lưu trữ trạng thái.

Điều gì JApplication/setUserState khác nhau là nó sẽ lưu trữ mọi cặp khóa giá trị trong một JRegistry. Vì vậy, nó là tương đương với:

$session = JFactory::getSession(); 
$registry = $session->get('registry'); 
$registry->set('myvar', $myvarvalue); 

Vì vậy, điểm của việc sử dụng một số JRegistry là gì? Đó là khá nhiều chức năng được cung cấp JRegistryFormat. Bạn có thể sử dụng nó để cả hai phân tích và định dạng tiểu bang:

$session = JFactory::getSession(); 
$registry = $session->get('registry'); 
$json = $registry->toString('JSON'); 
$xml = $registry->toString('XML'); 

Nó cũng giá trị chỉ ra rằng việc sử dụng JApplication/setUserState tiểu bang của bạn sẽ kết thúc trong "mặc định" không gian tên:

$app = JFactory::getApplication(); 
$app->setUserState('myvar', $myvarvalue); 
// $_SESSION['default']['registry']->set('myvar', $myvarvalue) 
+0

Cảm ơn cho câu trả lời chi tiết ! Tôi cảm thấy tôi hiểu sự khác biệt/điểm tương đồng hiện tại :) – TryHarder