[TYPO3-mvc] Putting together a object for updateAction, from ExtJs/json
dennis ahrens
dennis.ahrens at googlemail.com
Wed Mar 17 10:54:43 CET 2010
Hi Dmitri,
the data comes in one POST/GET parameter and is encoded in json. The
"problem" is the loacation (in the code) where to apply the data to
the php-object. Of course it feels much better when the action
receives a modified object where the json data is applied instead of
the array containing the changes.
For fluid templates the magic is done when initializing the controller
and it's action. I think the implementation should be done at the
same location.
Can anyone give a cleaner view for this scenario?
regards
Dennis
2010/3/17 Dmitri Pisarev <dimaip at gmail.com>:
> Hi!
> I'm a complete novice at extbase, but the way you do it looks really strange
> to me.
> Why not do this like this:
> /**
> * Updates client.
> *
> * @param Tx_Alex_Domain_Model_Client $client
> * @return string The rendered view
> * @dontverifyrequesthash
> */
> public function updateAction($client) {
> $this->clientRepository->update($client);
> $this->flashMessages->add('Your client was updated.');
> echo '{success:true}';
> }
> And from extjs submit something like this:
> tx_alex_pi1[__referer][ac... index
> tx_alex_pi1[__referer][co... Client
> tx_alex_pi1[__referer][ex... Alex
> tx_alex_pi1[client][__identity] 1
> tx_alex_pi1[client][addre... Leninsky
> tx_alex_pi1[client][telep... 3395701
> tx_alex_pi1[client][title... Nord-Way
> Sorry, firebug has croped the names, but you get the idea.
>
> Regards,
> Dmitri.
> On 15.03.2010 22:18, dennis ahrens wrote:
>>
>> Hi Søren,
>>
>> I've solved the problem like shown in the following action:
>>
>> /**
>> * Updates a record
>> *
>> * TODO: make the extjs Store to use the extbase controller
>> parameter
>> signature, that we
>> * can fetch the data out of $this->request->getArgument('data');
>> *
>> * @return void
>> */
>> public function updateAction() {
>> try {
>> // read and prepare data from POST
>> $dataJson = t3lib_div::_POST('data');
>> $dataArray = json_decode($dataJson,true);
>> $uid = (int) t3lib_div::_POST('uid');
>> // fetch the projekt that should be updated
>> $forschungsprojekt =
>> $this->forschungsprojektRepository->findByUid($uid);
>> // apply the changes to the object
>> $forschungsprojekt =
>> $this->applyUpdate($dataArray,$forschungsprojekt);
>> // apply the changes to the database
>>
>> $this->forschungsprojektRepository->update($forschungsprojekt);
>> // sync group configuration for access
>> management
>> $this->accessManager->write($forschungsprojekt);
>> // tell the view layer that everything is
>> ok
>> $this->view->assign('changedData',$dataArray);
>> $this->view->assign('success',TRUE);
>> $this->view->assign('message', '');
>> } catch (Exception $e) {
>> if (!is_array($dataArray))
>> $dataArray = array();
>> // tell the view layer that something is
>> not ok ... :)
>> $this->view->assign('changedData',$dataArray);
>> $this->view->assign('success',FALSE);
>> $this->view->assign('message','Forschungsprojekt
>> konnte nicht
>> gespeichert werden');
>> // tell the developer a little bit about
>> the occured error
>> t3lib_div::sysLog('Exception: ' .
>> $e->getMessage(),'FhhForschungsprojekte',4);
>> t3lib_div::sysLog('Exception-Trace: ' .
>> $e->getTraceAsString(),'FhhForschungsprojekte',3);
>> }
>> }
>>
>> The "mapping" between the json data and the model is hidden behind
>> applyUpdate().
>> I use the extjs jsonwriter config option 'writeAllFields' for just
>> telling the server about the made changes.
>>
>> I think it would be much better to do the mapping when intializing the
>> action argument - but haven't found the time yet to dig deeper
>> there...
>>
>> regards
>> Dennis
>>
>> 2010/3/15 Søren Malling<soren.malling at gmail.com>:
>>>
>>> Hi,
>>>
>>> Getting closer to the goal of my first Extbase and ExtJs project I've
>>> ran into a issue.
>>>
>>> When posting to my Extbase page, where the update-, index-,
>>> createAction etc are placed, the data is posted as POST. The update
>>> action requires a object of Tx_Groupmembers_Domain_Model_Member
>>>
>>> public function updateAction(Tx_Groupmembers_Domain_Model_Member $member)
>>> {
>>>
>>> but how do i create a object mathcing the "shape" of a Domain_Model
>>> object? Is it possible/correc to remove the
>>> "Tx_Groupmembers_Domain_Model_Member $member" part of the function and
>>> then create the a object based on the "POST" data or should i look in
>>> to ExtJs to see how I can submit it like a object in someway?
>>>
>>> Regards,
>>>
>>> Søren
>>> _______________________________________________
>>> TYPO3-project-typo3v4mvc mailing list
>>> TYPO3-project-typo3v4mvc at lists.typo3.org
>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-project-typo3v4mvc
>>>
>
> _______________________________________________
> TYPO3-project-typo3v4mvc mailing list
> TYPO3-project-typo3v4mvc at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-project-typo3v4mvc
>
More information about the TYPO3-project-typo3v4mvc
mailing list