[TYPO3-mvc] Putting together a object for updateAction, from ExtJs/json
dennis ahrens
dennis.ahrens at googlemail.com
Wed Mar 17 14:06:28 CET 2010
Hi Dmitri,
I don't know how to configure the JsonReader and the JsonWriter to
match the expected structure. If you're using a default store
configured with autoSave:true and writeAllFields: false the data is
placed automatically in an HTTP parameter called data. I think the
name 'data' is caused by the reader configuration, which wants it's
data in a json object property called data:
the configuration object for the Reader looks like this:
{totalProperty: 'total', successProperty: 'success', idProperty:
'uid', root: 'data', fields:[....]}
The Reader can interpret reponse data which looks like this:
{"message":"foo","total":0,"success":true,"data":[]}
When using the CRUD features shipped by extjs the described HTTP
request param named 'data' is send to the server.
regards
Dennis
2010/3/17 Dmitri Pisarev <dimaip at gmail.com>:
> Hi Dennis,
> I still don't understand why not to create a proper object in ExtJS right a
> way, as in my example. Why do you ever have to access _POST directly?
>
> On 17.03.2010 12:54, dennis ahrens wrote:
>>
>> 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
>>>
>
> _______________________________________________
> 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