I think I must be missing a lot here. If anyone has any advice that would be great. Otherwise it's back to the docs for me!
Matthew Lurz wrote: > > <p>Please excuse my ignorance as I've worked very little with any RPC > service in the past. > > <p>I'm attempting to AJAJ-enable a form. I've selected a simple form > containing 2 ValidationTextBoxes. I'm using the modular directory > structure and the controller class in this case is Dashboard_Options and > the action is blogAction. The Dojo view integration is working as expected > but I must be missing something. I have created the getJsonRpcServer and > jsonRpcAction methods in the controller as described > http://framework.zend.com/manual/en/zend.json.server.html here (I > understand that this is but 1 potential solution): > > <p>Which seems to be calling the blogAction however I receive this error: > > <p>"<em>Variable number of arguments is not supported for services (except > optional parameters). Number of function arguments must currespond to > actual number of arguments described in a docblock.</em>" > > <p>Sidebar: I copied and pasted the error message. What is the procedure > for submitting a a minor spelling mistake to the developers? > > <p>I understand that the methods are to contain docblocks so that the > JSON-RPC service knows the signature of the method but in this case there > are no arguments to the method nor a return value. Again, I must be > missing something but am at a loss. I believe that I need to detect and > handle the AJAJ request differently but am unsure of what/how. > > <p>Here are the methods: > > <div style="font-family: monospace;" id="code-div" class="php"><ol><li > class="li1"><div class="de1"> /**</div></li> > <li class="li1"><div class="de1"> * JSON-RPC Server setup</div></li> > <li class="li1"><div class="de1"> */</div></li> > <li class="li1"><div class="de1"> public function > getJsonRpcServer()</div></li> > <li class="li2"><div class="de2"> {</div></li> > <li class="li1"><div class="de1"> // Disable auto-rendering and > layouts</div></li> > <li class="li1"><div class="de1"> > $this->_helper->viewRenderer->setNoRender(true);</div></li> > <li class="li1"><div class="de1"> > $this->_helper->layout->disableLayout(true);</div></li> > <li class="li1"><div class="de1"> </div></li> > <li class="li2"><div class="de2"> $server = new > Zend_Json_Server();</div></li> > <li class="li1"><div class="de1"> > $server->setTransport('POST')</div></li> > <li class="li1"><div class="de1"> > ->setTarget('/dashboard/options')</div></li> > <li class="li1"><div class="de1"> > ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2)</div></li> > <li class="li1"><div class="de1"> > ->setClass('Options');</div></li> > <li class="li2"><div class="de2"> </div></li> > <li class="li1"><div class="de1"> return $server;</div></li> > <li class="li1"><div class="de1"> }</div></li> > <li class="li1"><div class="de1"> </div></li> > <li class="li1"><div class="de1"> public function > jsonRpcAction()</div></li> > <li class="li2"><div class="de2"> {</div></li> > <li class="li1"><div class="de1"> $server = > $this->getJsonRpcServer();</div></li> > <li class="li1"><div class="de1"> $response = > $this->getResponse();</div></li> > <li class="li1"><div class="de1"> </div></li> > <li class="li1"><div class="de1"> if ($this->getRequest()->isGet()) > {</div></li> > <li class="li2"><div class="de2"> $smd = > $server->getServiceMap();</div></li> > <li class="li1"><div class="de1"> > $smd->setDojoCompatible(true);</div></li> > <li class="li1"><div class="de1"> > $response->setHeader('Content-Type', 'application/json')</div></li> > <li class="li1"><div class="de1"> > ->setBody($smd->toJson());</div></li> > <li class="li1"><div class="de1"> } else {</div></li> > <li class="li2"><div class="de2"> $result = > $server->handle();</div></li> > <li class="li1"><div class="de1"> > $response->setBody($result->toJson());</div></li> > <li class="li1"><div class="de1"> }</div></li> > <li class="li1"><div class="de1"> }</div></li> > <li class="li1"><div class="de1"> </div></li> > <li class="li2"><div class="de2"> /**</div></li> > <li class="li1"><div class="de1"> * Edit blog options</div></li> > <li class="li1"><div class="de1"> */</div></li> > <li class="li1"><div class="de1"> public function > blogAction()</div></li> > <li class="li1"><div class="de1"> {</div></li> > <li class="li2"><div class="de2"> // Form setup & > processing</div></li> > <li class="li1"><div class="de1"> $form = > $this->_helper->formLoader();</div></li> > <li class="li1"><div class="de1"> > $form->blog_hash->setSalt($this->salt);</div></li> > <li class="li1"><div class="de1"> > $form->populate($this->options->toArray());</div></li> > <li class="li1"><div class="de1"> $request = > $this->getRequest();</div></li> > <li class="li2"><div class="de2"> if (($request->isPost()) && > ($form->isValid($request->getPost()))) {</div></li> > <li class="li1"><div class="de1"> // Save options and > redirect</div></li> > <li class="li1"><div class="de1"> > $this->options->synchronizeWithArray($form->getValues());</div></li> > <li class="li1"><div class="de1"> > $this->options->save();</div></li> > <li class="li1"><div class="de1"> > $this->messenger->addMessage(self::BLOG_OPTIONS_SAVED);</div></li> > <li class="li2"><div class="de2"> > $this->redirector->gotoSimple('edit', 'options', 'dashboard'); </div></li> > <li class="li1"><div class="de1"> }</div></li> > <li class="li1"><div class="de1"> </div></li> > <li class="li1"><div class="de1"> // View variable > assignment</div></li> > <li class="li1"><div class="de1"> $this->view->form = > $form;</div></li> > <li class="li2"><div class="de2"> }</div></li></ol></div> > -- View this message in context: http://www.nabble.com/Dojo-%2B-JSON-RPC-tp19033900p19062806.html Sent from the Zend Framework mailing list archive at Nabble.com.
