I have a few pages that is not connected with entities (index page, terms of use page, email page).
Detailed description: In CakePHP, when you want to have a static page (such as index for example), you should use the PagesController
(not connected to any entity). However, my static pages have dynamic content, as the index page (the navbar
is dynamic: it has the name of the user when logged in, and special buttons).
1st: To do this, I create a CustomStaticPagesController
controller (which is not connected to any entity), in which I created the methods (index, email, termos-de-servico).
2nd: I edited the routes.php
references to the actions without the standard localhost/controller/action now this localhost/action.
Question: How can I improve (do it right) the two points referred to above? Any other point to improve ?
CustomStaticPagesController controller code:
<?php
namespace App\Controller;
use App\AppClasses\FormatFormValues\FormatContactForm;
use Cake\Event\Event;
use Cake\Network\Email\Email;
class CustomStaticPagesController extends AppController
{
public function index()
{
$userId = $this->Auth->user('id');
$username = $this->Auth->user('username');
$this->loadModel('Categories');
$categories = $this->Categories->getAllCategories();
$this->loadModel('SubCategories');
$subCategories = $this->SubCategories->getAllSubCategories();
$subCategoriesName = $this->SubCategories->listAllSubCategories();
$this->loadModel('UserTypes');
$userTypes = $this->UserTypes->listSubCategories();
$this->loadModel('Banners');
$fullBanners = $this->Banners->full();
$smallBanners = $this->Banners->small();
$this->loadModel('Products');
$productsBestSeller = $this->Products->getProductTrendByColumn('sold', 0);
$productsNewer = $this->Products->getProductTrendByColumn('created', 0);
$productsMostPopular = $this->Products->getProductTrendByColumn('visited', 0);
$this->loadModel('Offers');
$offers = $this->Offers->offersRecursive();
$this->loadModel('News');
$news = $this->News->getRecentNews();
$this->set(compact('userId', 'username', 'userTypes', 'smallBanners',
'fullBanners', 'offers', 'news', 'categories', 'subCategories',
'subCategoriesName', 'productsBestSeller', 'productsNewer',
'productsMostPopular'));
}
public function perguntasFrequentes()
{
$userId = $this->Auth->user('id');
$username = $this->Auth->user('username');
$this->loadModel('UserTypes');
$userTypes = $this->UserTypes->listSubCategories();
$this->set(compact('userId', 'username', 'userTypes'));
}
public function termosDeServico()
{
$userId = $this->Auth->user('id');
$username = $this->Auth->user('username');
$this->loadModel('UserTypes');
$userTypes= $this->UserTypes->listSubCategories();
$this->set(compact('userId', 'username', 'userTypes'));
}
public function politicasDePrivacidade()
{
$userId = $this->Auth->user('id');
$username = $this->Auth->user('username');
$this->loadModel('UserTypes');
$userTypes = $this->UserTypes->listSubCategories();
$this->set(compact('userId', 'username', 'userTypes'));
}
public function email()
{
if ($this->request->is('get'))
{
$userId = $this->Auth->user('id');
$username = $this->Auth->user('username');
$this->loadModel('UserTypes');
$userTypes = $this->UserTypes->listSubCategories();
$this->set(compact('userId', 'username', 'userTypes'));
}else if($this->request->is('post'))
{
Email::configTransport('gmail', [
'host' => 'smtp.gmail.com',
'port' => 587,
'username' => 'xxxxxxxxxxxxx',
'password' => 'xxxxxxxxxxxxx',
'className' => 'Smtp',
'tls' => true
]);
$email = new Email();
$email->transport('gmail');
$email->from(['[email protected]' => 'Store Site'])
->to('[email protected]')
->emailFormat('html')
->subject(
FormatContactForm::getSubject(
$this->request->data['subject'],
['suffix' => ' | Store Site']
)
)
->send(
FormatContactForm::getMessage(
$this->request->data,
['uppercaseLabel' => true]
)
);
return $this->redirect(['controller' => 'CustomStaticPages', 'action' => 'index']);
}
}
public function beforeFilter(Event $event)
{
$this->Auth->allow(['index', 'perguntasFrequentes', 'email', 'politicasDePrivacidade', 'termosDeServico']);
}
}
routes.php code
Router::scope('/', function ($routes) {
$routes->connect('/', ['controller' => 'CustomStaticPages', 'action' => 'index']);
$routes->connect('/pages/*', ['controller' => 'CustomStaticPages', 'action' => 'index']);
$routes->connect('/termos-de-servico', ['controller' => 'CustomStaticPages', 'action' => 'termosDeServico']);
$routes->connect('/politicas-de-privacidade', ['controller' => 'CustomStaticPages', 'action' => 'politicasDePrivacidade']);
$routes->connect('/perguntas-frequentes', ['controller' => 'CustomStaticPages', 'action' => 'perguntasFrequentes']);
$routes->connect('/email', ['controller' => 'CustomStaticPages', 'action' => 'email']);
$routes->fallbacks('DashedRoute');
});