2
I have a signature method: public function mostPopular()
I’m trying to access it via URL
as follows: products/most-popular
but I am being directed to a Error page:
The action Most-popular is not defined in Productscontroller
but following the naming conventions of Cakephp 3.0 should not happen this error.
Route file (Routes.php)
<?php
use Cake\Core\Plugin;
use Cake\Routing\Router;
/**
* The default class to use for all routes
*
* The following route classes are supplied with CakePHP and are appropriate
* to set as the default:
*
* - Route
* - InflectedRoute
* - DashedRoute
*
* If no call is made to `Router::defaultRouteClass`, the class used is
* `Route` (`Cake\Routing\Route\Route`)
*
* Note that `Route` does not do any inflections on URLs which will result in
* inconsistently cased URLs when used with `:plugin`, `:controller` and
* `:action` markers.
*
*/
Router::defaultRouteClass('Route');
Router::scope('/', function ($routes) {
/**
* Here, we are connecting '/' (base path) to a controller called 'Pages',
* its action called 'display', and we pass a param to select the view file
* to use (in this case, src/Template/Pages/home.ctp)...
*/
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
// tendo pages após o dominio (sequido de qualquer coisa) será redirecionado para o controller pages,
// método display, qualquer coisa após o * será passado como parametro
/**
* ...and connect the rest of 'Pages' controller's URLs.
*/
$routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
/**
* Connect catchall routes for all controllers.
*
* Using the argument `InflectedRoute`, the `fallbacks` method is a shortcut for
* `$routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'InflectedRoute']);`
* `$routes->connect('/:controller/:action/*', [], ['routeClass' => 'InflectedRoute']);`
*
* Any route class can be used with this method, such as:
* - DashedRoute
* - InflectedRoute
* - Route
* - Or your own route class
*
* You can remove these routes once you've connected the
* routes you want in your application.
*/
$routes->fallbacks('InflectedRoute');
});
/**
* Load all plugin routes. See the Plugin documentation on
* how to customize the loading of plugin routes.
*/
Plugin::routes();
Code of the mostpopular method():
public function mostPopular()
{
$this->layout = false;
if($this->request->is('post'))
{
$productsQuantity = 4;
$order = 'DESC';
$column = 'visited';
$subCategoryId = $this->request->data['subCategory'];
$productsMostPopular = $this->Search->listProductsByTrend($subCategoryId, $productsQuantity, $column, $order);
//$this->set('productsMostPopular', $productsMostPopular);
//$this->set('_serialize',array('productsMostPopular'));
echo json_encode($subCategoryId);
}
}
NOTE: I’m using Cakephp 3.0
If I’m not mistaken you won’t be able to access the method this way, you will only be able to access it if you are
– Sr. André Baill
@Andrébaill the problem is that according to the documentation of the way I did it is supported by Cakephp
– Ricardo
Puts, the Laravel by default comes with this conversion :)
– Wallace Maxters
@Wallacemaxters by default Cake also has
– Ricardo
I guess cakephp 2 wasn’t like this :)
– Wallace Maxters
@Wallacemaxters Cakephp 3 has changed a lot
– Ricardo
@Ricardo can share the doc link where he saw?
– Marcelo de Andrade