-1
votes

Les contrôleurs Laravel peuvent-ils fonctionner des variables?

Ma question est simple, je souhaite créer une route variable, mais je souhaite créer une fonction variable à l'intérieur de l'itinéraire.

est-ce posable? p>

Route::get('/{tabla}/get','WebSystem\{tabla}@{tabla}')->name('activities');


6 commentaires

Je n'ai pas compris ce que vous voulez réaliser


@GiaComom Je veux créer un itinéraire où le contrôleur et la fonction sont variables


Non, la chaîne cible est toujours interprétée comme une chaîne. Il ne peut pas être défini de manière dynamique.


Vous pouvez éventuellement le faire à l'intérieur d'un contrôleur, mais je ne suis pas sûr de le recommander. Cela peut potentiellement être une grosse canette de vers, gardez le mieux que le couvercle fermé.


Vous pouvez utiliser une fonction de rappel comme cible et résoudre le contrôleur manuellement, mais je vous conseillerais fortement. Cela permettrait d'ignorer les milieux et d'empêcher la mise en cache par exemple.


Je ne pense pas que ce soit une bonne idée, en cas de méthode non trouvée, vous obtiendrez une méthodeNotFoundException à moins que vous n'ayez écrit le __Call (); Pourquoi ne spécifie-vous pas une méthode à appeler alors faire la logique à partir de là-bas à la place ?, Il devrait agir de la même manière, mais il vaut mieux gérer, avoir un appel permet de dire: Callmethodscontroller @ appel, et de là, vous pouvez faire ce que vous voulez, nettoyeur?


4 Réponses :


2
votes

Vous pouvez utiliser une notation différente (il nécessite de modifier l'espace de noms par défaut dans votre routresserviceProvider): xxx

qui nous conduit à: xxx

En outre, cette approche garantit que certains IDE (comme phpstorm) refacteur vos itinéraires. Dans l'exemple: lorsque vous souhaitez modifier le nom ou l'espace de noms de votre contrôleur.


0 commentaires

1
votes

Oui, vous pouvez.

web.php xxx

contrôleur.php xxx


0 commentaires

0
votes

Vous pouvez utiliser cette méthode xxx


0 commentaires

0
votes

Voir le ci-dessous, cela pourrait fonctionner,

Route::get('/one/{class}/{method}', function(Request $request, $class, $method) use ($router) {
    $n = "App\Http\Controllers\ $class";
    $n = explode(' ', $n);
    $n = implode('', $n);
    $n = new $n;

    return $n->{$method}($request);
});


0 commentaires