Jump to content
php.lv forumi

Recommended Posts

Posted (edited)

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
Posted (edited)

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
Posted

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".

Posted

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ā.

Posted

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.

Posted (edited)

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
Posted

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.

Posted

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.

Posted

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.

Posted

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.

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...
×
×
  • Create New...