Jump to content
php.lv forumi
Sign in to follow this  
entu

CI objektu glabāšana sessijā

Recommended Posts

Sveiki. Ja tas ir iespējams, tad kā CI sesijā varētu saglabāt objektu ar visu instanci.

 

Piemēram:

 

$user = new $this->user;
$this->session->set_userdata("user", $user );

un tagad kādā citā lapā:

 

$user = $this->session->userdata("user");
$user->change_name("zirgs"); //šo te neļauj izpildīt

 

Bet protams $user objekts tika atsūtits kā parasts objekts un ir "__PHP_Incomplete_Class". Kā varētu atjaunot šim objektam instanci?

Edited by entu

Share this post


Link to post
Share on other sites

serialize().

 

Bet nedomāju, ka tas ir labākais veids - glabāt objektu sesijā. Objektu!

Share this post


Link to post
Share on other sites

Nav problēmas iedabut to objektu sessijā, bet gan atjaunot objekta instanci ar klasi. Bet varbūt ir pavisam cits piegājiens, lai varētu tikt pie tā paša objekta citā kontrolleri vai arī tā paša robežās?

Edited by entu

Share this post


Link to post
Share on other sites

Ahā, skaidrs. Labs jautājums!

 

Pieliekot class Foo {} pirms unserialize() to itkā atrisina.

 

Jebkurā gadījumā... nesaprotu kāpēc nerādās objekta metodes, tikai "propertiji".

Share this post


Link to post
Share on other sites

Diezgan esmu izmeklējiesu un izlasījies, bet vēl neesmu atradis risinājumu. Viens variants bija, papriekšu ielādetēt modeli, pirms tiek palaista sessija, nezinu vai tas strādā bet man atkrīt, jo lietoju CI sessijas bibliotāku, kuru ielādējas autoloadā.

Share this post


Link to post
Share on other sites

Bet kāpēc Tev vajag objektu sesijā?

Share this post


Link to post
Share on other sites

Ir tāda sarežģītāka faila sūtīšanas paņēmiens, ko es tagad cenšos uzlabot ar objekta palīdzibu :). Ok, itkā lietu atrsināju manuāli atjaunojot objekta instanci, izveodjoto jaunu objektu un uz to padodot caur sesiju iegūtos propertijus.

Share this post


Link to post
Share on other sites

Laikam tieši tā bija jādara, +1.

Share this post


Link to post
Share on other sites

Ieliek modeli sesijā

$user = serialize($this->user);
$this->session->set_userdata("user", $user );

 

Izņem modeli no sesijas

$this->load->model("user_model"); //pirms klases instances unserializēšanas jābūt ielādētai klases definīcijai
$user = unserialize($this->session->userdata("user"));
$user->change_name("zirgs");

 

Teorētiski jāsdrādā

 

 

P.S. Pievērs uzmanību savai terminoloģijai: "atjaunot objekta instanci ar klasi"

Edited by 101111

Share this post


Link to post
Share on other sites

Tā arī taisīju, bet tāpat neaizgāja. Pagaidām apmierina mans pašreizējais variants, bet vēlāk paekspermentēšu vēl. Jā ar terminoloģiju ir pašvaki, galvā kokteilis.

Share this post


Link to post
Share on other sites

Visticamāk, ka bezjēdzīgi, bet es sameklēju identisku piemēru no savas prakses (un tas darbojas)

 


//ieliek
$this->load->model("user_model", "user");
$this->user->username = trim($_POST["username"]);
...
$_SESSION["user"] = serialize($this->user);


//izmanto
$this -> load -> model("user_model");
$user = unserialize($_SESSION["user"]);

 

te gan netiek izmantotas CI sesiju bibliotēkas iespējas, bet lietas būtību tas nemaina.

Share this post


Link to post
Share on other sites

Interesanti, bet tagad strādā :D Iepriekš izmēģinājos gan ar, gan bez serialize funkcijām, varbūt tomēr kautko biju palaidies garām. Paldies.

Share this post


Link to post
Share on other sites

Uzpīpēju, padomāju.

 

Ir divas atsevišķas lietas: klase un objekts.

 

Klase Sevī neko neglabā. Tā ir kā struktūra... tai skaitā tā satur metodes.

 

Serializējot objektu (nejaukt!) tiek saglabātas vērtības, kas objektam ir bijušas. Nevis struktūra.

 

Tieši tāpēc pirms atserializācijas (tas ir vārds!) vajag iekļaut klasi, no kuras ir "būvēts" attiecīgais objekts.

 

Labot Mani, ja pārprotu.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...