entu Posted July 10, 2011 Report Share Posted July 10, 2011 (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 July 10, 2011 by entu Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 10, 2011 Report Share Posted July 10, 2011 serialize(). Bet nedomāju, ka tas ir labākais veids - glabāt objektu sesijā. Objektu! Quote Link to comment Share on other sites More sharing options...
entu Posted July 10, 2011 Author Report Share Posted July 10, 2011 (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 July 10, 2011 by entu Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 10, 2011 Report Share Posted July 10, 2011 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". Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 10, 2011 Report Share Posted July 10, 2011 Te vari palasīties... Quote Link to comment Share on other sites More sharing options...
entu Posted July 10, 2011 Author Report Share Posted July 10, 2011 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ā. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 10, 2011 Report Share Posted July 10, 2011 Bet kāpēc Tev vajag objektu sesijā? Quote Link to comment Share on other sites More sharing options...
entu Posted July 10, 2011 Author Report Share Posted July 10, 2011 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. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 10, 2011 Report Share Posted July 10, 2011 Laikam tieši tā bija jādara, +1. Quote Link to comment Share on other sites More sharing options...
101111 Posted July 10, 2011 Report Share Posted July 10, 2011 (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 July 10, 2011 by 101111 Quote Link to comment Share on other sites More sharing options...
entu Posted July 10, 2011 Author Report Share Posted July 10, 2011 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. Quote Link to comment Share on other sites More sharing options...
101111 Posted July 10, 2011 Report Share Posted July 10, 2011 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. Quote Link to comment Share on other sites More sharing options...
entu Posted July 10, 2011 Author Report Share Posted July 10, 2011 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. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 10, 2011 Report Share Posted July 10, 2011 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. Quote Link to comment Share on other sites More sharing options...
briedis Posted July 10, 2011 Report Share Posted July 10, 2011 It kā varētu palasīt manuāli :) http://php.net/manual/en/function.serialize.php Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.