Je suis en train de me remettre doucement à la migration d'une appli sous le FW Slim3. Tous va très bien malgré le fait que je trouve des lenteurs et des répétitions dans la rédaction de mon code. Et j'aimerais des conseils / astuces / façons de faire pour changer tout ça !
Pour résumer, j'ai une arborescence de fichiers comme suit :
Si je prends mon fichier NotFoundHandler par exemple, qui se charge des 404 sur mon appli, j'ai en tout et pour tout ce code là (moins les commentaires) :
<?php
namespace App\Handlers;
use \Psr\Http\Message\RequestInterface;
use \Psr\Http\Message\ResponseInterface;
use \Respect\Validation\Validator;
use \Illuminate\Database\Eloquent\Model;
class NotFoundHandler extends \Slim\Handlers\NotFound {
private $templatePath = '';
private $view;
public function __construct(\Slim\Views\Twig $view) {
$this->view = $view;
}
public function __invoke(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response) {
parent::__invoke($request, $response);
$templateFile = '404.twig';
$this->view->render($response, $this->templatePath . $templateFile);
return $response->withStatus(404);
exit();
}
}
Il a le mérite de fonctionner, mais je dois à chaque mentionner le "chemin complet" des élements, tels que "\Psr\Http\Message\ServerRequestInterface" ou encore "\Slim\Views\Twig".
Dans mon routeur, c'est pareil, je me retrouve avec des longeurs de lignes inutiles du genre " $app->get('/', App\Controllers\DashboardController::class . ':dashboard')->setName('root');" alors que j'indique dès le début les namespaces à utiliser.
// --- HANDLERS NAMESPACES -- //
use App\Handlers\LoginHandler;
use App\Handlers\NotFoundHandler;
// --- END HANDLERS NAMESPACES --- //
// --- CONTROLLERS NAMESPACES --- //
use App\Controllers\DashboardController;
use App\Controllers\PagesController;
use App\Controllers\QuotesController;
use App\Controllers\SearchController;
use App\Controllers\CronController;
use App\Controllers\ContactsController;
use App\Controllers\CompaniesController;
// --- END CONTROLLERS NAMESPACES --- //
Si quelqu'un a la solution pour palier à ce problème, je suis preneur. Ou alors si quelqu'un peut m'expliquer pourquoi cette nécessité, je serais ravi de savoir. Personnellement, je croyais que les namespaces servaient justement à palier à ces longeurs en indiquant les emplacements des classes de façon à les charger dynamiquement via un autoloader ...
En gros tu dois le faire pour chaque fichier car le use ce n'est pas un require.
Edit: Si je reprends l'exemple de ton NotFoundHandler ça donnerai :
<?php
namespace App\Handlers;
// Je te les laisses car je sais pas si tu les utilises ailleurs
// Mais sinon tu peux les enlever
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use \Respect\Validation\Validator;
use Illuminate\Database\Eloquent\Model;
// Les nouveaux
use \Slim\Handlers\NotFound;
use \Slim\Views\Twig;
use Psr\Http\Message\ServerRequestInterface;
class NotFoundHandler extends NotFound
{
private $templatePath = '';
private $view;
public function __construct(Twig $view)
{
$this->view = $view;
}
public function __invoke(ServerRequestInterface $request, ResponseInterface $response)
{
parent::__invoke($request, $response);
$templateFile = '404.twig';
$this->view->render($response, $this->templatePath, $templateFile);
return $response->withStatus(404);
// exit(); cette ligne ne sera jamais exécuté
}
}
Voici par exemple à quoi pourrai servir un use :
<?php
namespace App\Handlers;
use Psr\Http\Message\{
RequestInterface as IRequest,
ResponseInterface as IResponse,
ServerRequestInterface as IServerRequest
};
// Je pousse le vice assez loin car en vrai
// je n'utilise pas les versions avec {}
// et le as je m'en sert que quand il y a
// un conflit de nom d'alias entre 2 classes.
use \Respect\Validation\Validator;
use Illuminate\Database\Eloquent\Model;
use \Slim\Handlers\NotFound;
use \Slim\Views\Twig;
class NotFoundHandler extends NotFound
{
private $templatePath = '';
private $view;
public function __construct(Twig $view)
{
$this->view = $view;
}
public function __invoke(IServerRequest $request, IResponse $response)
{
parent::__invoke($request, $response);
$templateFile = '404.twig';
$this->view->render($response, $this->templatePath, $templateFile);
return $response->withStatus(404);
// exit(); cette ligne ne sera jamais exécuté
}
}
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL