I discovered a bug in the Route.php file.
the reg expression used for finding extensions only works if no parameters are passed in the URL.
I have temporarily modified my Routes.php file to find the extension anywhere in the string and used str_replace to remove the .json from the url and I no longer get the action missing error.
I still get the template missing error though.
On Wednesday, October 14, 2015 at 2:02:24 PM UTC+7, heavyKevy wrote:
-- the reg expression used for finding extensions only works if no parameters are passed in the URL.
I have temporarily modified my Routes.php file to find the extension anywhere in the string and used str_replace to remove the .json from the url and I no longer get the action missing error.
I still get the template missing error though.
On Wednesday, October 14, 2015 at 2:02:24 PM UTC+7, heavyKevy wrote:
I have gone through the documentation, which is a bit too vague, and tried many things, but I still am getting an error that the template file is missing.
I had this working sending back a json response in 3.0 using ext='json', yet after updating to 3.1 it is broken.
I checked the migration guide and tried changing ext to _ext, setting up the Routes with:
Router::extensions(['json']);
in the controller method I am using the _serialize key which is supposed to render without the template:
$this->set('_serialize', ['salesPeople']);
The JsonView class does not appear to be loading and I don't see in the documentation where I am supposed to set it.
The documentation says ' you can automatically leverage the new view classes' By enabling RequestHandlerComponent in your application, and enabling support for the json and or xml extensions, but I have enabled it in the Initialize method of the controller and enabled the 'json' extension as mentioned earlier and it is still not working.
Here is the method in question:
public function getSalesPeopleSelectList() {
$this->request->accepts('json'); // No direct access via browser URL
$dealerId = $this->request->params['pass'][0];
$this->RequestHandler->renderAs($this, 'ajax');
//$this->viewClass = 'Json';
$this->loadModel('SalesPeople');
$salesPeople = $this->Purchases->SalesPeople->find('list')->where(['is_ active'=>'1','user_id'=>$ dealerId]); //for salespeople options for autocomplete
$this->set(compact('salesPeople'));
$this->set('_serialize', ['salesPeople']);
}
When I enable the _ext = json I get the following error:
2015-10-14 06:57:36 Error: [Cake\Controller\Exception\MissingActionException] Action PurchasesController:: getSalesPeopleSelectList.json( ) could not be found, or is not accessible.
Exception Attributes: array (
'controller' => 'PurchasesController',
'action' => 'getSalesPeopleSelectList.json',
'prefix' => '',
'plugin' => NULL,
)
Request URL: /Subaru/purchases/get-sales-people-select-list.json/47
Stack Trace:
#0 C:\WebServer\cake\subaru\vendor\cakephp\cakephp\src\ Routing\Dispatcher.php(114): Cake\Controller\Controller-> invokeAction()
#1 C:\WebServer\cake\subaru\vendor\cakephp\cakephp\src\ Routing\Dispatcher.php(87): Cake\Routing\Dispatcher->_ invoke(Object(App\Controller\ PurchasesController))
#2 C:\WebServer\webdocs\Subaru\index.php(42): Cake\Routing\Dispatcher-> dispatch(Object(Cake\Network\ Request), Object(Cake\Network\Response))
#3 {main}
What have I missed?
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP
---
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cake-php+unsubscribe@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment