J'ai déjà développé l'API RESTFul de l'applet WeChat, en utilisant le framework ThinkPHP5.0.24. Récemment, je souhaite passer à ThinkPHP6.0.2. La structure des répertoires est la suivante : --app --api --controller --v1 --Index. Version .php Il peut également être écrit directement dans la route au format suivant : Route::get('api/:version/home','api/:version.Index/home' qui n'est plus pris en charge dans ThinkPHP6); .0.2, veuillez vous référer à https://blog.csdn.net/qq_35422558/article/details/100563723, dans cet article, créez un dossier api sous le fichier de route dans le répertoire racine du site Web. Vous trouverez ci-dessous un route.php. fichier de routage avec une structure telle que --route --api -- route.php app.php--verdor écrit Route::get('api/:version/home','api/:version.Index/home') dans apiroute.php. [b]Invalide après test[/b].
En consultant le manuel de développement ThinkPHP6, il a été clairement souligné que les adresses de routage ne supportent plus les modules/contrôleurs/opérations, mais supportent toujours les contrôleurs/opérations ou les méthodes de classe. Il y a donc trois solutions. La première : la méthode définie dans la classe peut être écrite comme Route::get(':version/home','appapicontroller:versionindex@home'). l'URL d'accès est http://localhost/[b]api[/b]/v1/home. La définition de la route sous l'application doit ajouter le nom de l'application. Si elle est écrite dans routeapp.php, l'URL d'accès est http://localhost/v1/home. N'oubliez pas de ne rien ajouter de plus.
Deuxième type : la définition du contrôleur/de l'opération ne peut être écrite que dans le répertoire de l'application routeroute.php Après le test, le nom du fichier route.php peut être défini arbitrairement. Il ne peut pas être défini dans routeapiroute.php et le test n'est pas valide. Route::get(':version/home',:version.Index/home') supprime la partie du nom de l'application lors de sa définition et l'ajoute lors de l'accès à l'URL, c'est-à-dire http://localhost/api/v1/ home
Troisième type : utiliser un contrôleur multi-niveaux en mode application unique --app --controller --api --v1 --Index.php --admin --Index.php --home --Index.php À l'heure actuelle , la route est définie dans Routeapp.phpRoute::get('api/:version/home',api.:version.Index/home')
Ce problème n'a pas été mentionné dans de nombreux tutoriels ThinkPHP6, et de nombreuses recherches sur le Internet n'a pas fonctionné après les tests. Le résumé est donc le suivant : 1. Le contrôleur multiniveau en mode application unique utilise les répertoires api et v1 comme sous-répertoires et répertoires petits-enfants du contrôleur. La structure est la même que ci-dessus. projet, je pense que c'est plus raisonnable, afin que l'administrateur et la maison puissent utiliser la même vue et le même modèle.
2. En mode multi-application, vous devez d'abord installer l'extension du mode multi-application, composer require topthink/think-multi-app, puis supprimer le dossier du contrôleur PHP think build api génère le répertoire d'application. set auto_multi_app=true. Le framework est jugé en fonction de l'existence d'un contrôleur. Qu'il s'agisse d'une seule application ou de plusieurs applications, créez un répertoire de route dans le répertoire de l'application et définissez le fichier route.php dans le répertoire. . Il n'est pas nécessaire d'indiquer un nom d'application. Ajoutez-le simplement à l'URL lors de l'accès. Route::get(':version/home',:version.Index/home') correspond à l'url : http://localhost/api/v1/home
3 Cette méthode de route vers la classe n'est pas couramment utilisée. mais si selon l'analyse ci-dessus, il peut être défini dans apirouteroute.php et routeapp.php, mais les URL consultées sont différentes. La première doit être ajoutée avec le nom de l'application api, et la seconde doit être quelle qu'elle soit. ajouter n'importe quoi.
4. Si vous êtes invité à indiquer Aucun fichier d'entrée spécifié lors de la saisie de l'URL ci-dessus, ce problème peut être résolu en ajoutant index.php à http://localhost/index.php. La suggestion est d'ajouter ? après le index.php de RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] dans public.htaccess, qui est RewriteRule ^(.*)$ index.php?/ 1 $ [QSA, PT, L]
事在人为