Introduction à la mise à niveau de la version thinkphp, en prenant la mise à niveau de 5.0 à 5.1 comme exemple :
Premier aperçu de la structure générale des répertoires de 5.0 :
project 应用部署目录 ├—application 应用目录(可设置) ├—extend 扩展类库目录(可定义) ├—public WEB 部署目录(对外访问目录) ├—runtime 应用的运行时目录(可写,可设置) ├—vendor 第三方类库目录(Composer) ├—thinkphp 框架系统目录
Regardez la structure générale des répertoires de la 5.1 :
www WEB部署目录(或者子目录) ├—application 应用目录 ├—config 应用配置目录 ├—route 路由定义目录 ├—public WEB目录(对外访问目录) ├—thinkphp 框架系统目录 ├—extend 扩展类库目录 ├—runtime 应用的运行时目录(可写,可定制) project 应用部署目录 ├—application 应用目录(可设置) ├—extend 扩展类库目录(可定义) ├—public WEB 部署目录(对外访问目录) ├—runtime 应用的运行时目录(可写,可设置) ├—vendor 第三方类库目录(Composer) ├—thinkphp 框架系统目录 ├—vendor 第三方类库目录(Composer依赖库)
À travers la première couche de répertoires, nous pouvons voir que la 5.1 n'a que plus de répertoires de configuration et de route, indiquant que la version 5.1 a déjà inclus les fichiers de configuration et les fichiers du routeur extraits.
Ci-dessous, nous utilisons le système de centre commercial open source wstmart comme exemple pour essayer de mettre à niveau.
Nous exportons d’abord le dernier framework thinkphp5.1 via git :
Exécutons-le et voyons le résultat :
Importez le code wstmart du centre commercial open source.
Recommandations associées : "Tutoriel ThinkPHP"
Nous coupons le wstmart dans le répertoire wstmart du centre commercial open source wstmart dans le répertoire tp5, modifions le fichier index.php , pour qu'Exécutez le projet directement dans le répertoire racine du système, puis modifiez le fichier de configuration de la base de données et activez la fonction de débogage, et exécutez-le :
Hmm ? ! ! Quelque chose s'est mal passé ? Parcourez rapidement la documentation. Faites défiler le document et jetez un œil, hein ? D'accord. Il s'avère que j'étais trop impatient de finir de le lire. Si je redéfinis le fichier d'entrée, je ne peux pas simplement utiliser le fichier index.php qui pointait à l'origine vers le répertoire public. Je dois également définir le répertoire de l'application, par exemple. : Container::get( 'app')->path(APP_PATH)->run()->send(); où APP_PATH est le répertoire de l'application à définir, je vais le changer en :
Container::get('app')->path(__DIR__ . '/wstmart/')->run()->send();Courez et voyez : Enfin normal. La raison de ce résultat est que je n'ai pas modifié le fichier de configuration et indiqué au système que le module par défaut est home. J'ai ensuite modifié le 'default_module' => 'home' dans le fichier app.php et je l'ai exécuté pour voir : Hein ? Que se passe-t-il avec ça ? Le fichier existe évidemment ! ! ! J'ai vérifié attentivement le document et j'ai découvert qu'il existe... il doit être 5.1 et il y a encore certaines fonctionnalités essentielles qui m'ont manqué, alors je suis retourné lire le document. Après avoir cherché d'avant en arrière, j'ai finalement trouvé cette phrase dans le guide de mise à niveau : "Si vous personnalisez l'espace de noms de la bibliothèque de classes d'application, vous devez définir la variable d'environnement APP_NAMESPACE au lieu du fichier de configuration de l'application. Si vous utilisez le fichier de configuration .env , vous pouvez y ajouter : APP_NAMESPACE = nom de l'espace de noms racine de votre bibliothèque d'applications." Je vois! ! Créez donc un fichier .env sous le système. Texte du contenu : app_namespace=wstmartExécutez-le à nouveau : Ce paragraphe signifie que cette fonction n'a pas été trouvée. Dans le framework thinkphp5.0, le système chargera automatiquement les fichiers dans le répertoire commun. Pourquoi n'est-il pas chargé automatiquement en 5.1 ? J'ai donc jeté un œil au code source de thinkphp5.1. Voir cette ligne : Sous le tableau non défini ? Une question si bizarre ? À partir du message d'erreur ci-dessous, nous pouvons localiser la fonction getFloors appelée par le fichier index.php du module home Le message d'erreur est le code :
$rs = Db::name('goods_cats')->where(['dataFlag'=>1, 'isShow' => 1,'parentId'=>['in',$ids],'isFloor'=>1]) ->field("parentId,catName,catId")->order('catSort asc')->select();Il y a un problème. Regardons à nouveau la documentation. Le document dit : a modifié la requête par lots multi-champs du constructeur de requête. Le
where(['name'=>['like','think%'], 'id'=>['>',0],])doit être ajusté à
where([['name','like','think%'], ['id','>',0],]). instructions ci-dessus pour modifier le code. Pour :
$rs = Db::name('goods_cats')->where([['dataFlag','=',1], ['isShow','=',1],['parentId','in',$ids],['isFloor','=',1]]) ->field("parentId,catName,catId")->order('catSort asc')->select();Effectivement, cette erreur n'apparaît plus. Vient ensuite une autre question : Reportez-vous à la documentation. Cette fonction a été modifiée dans thinkphp5.1. Nous avons remplacé thinkRequest par thinkFacadeRequest et l'erreur a de nouveau disparu. Ce qui suit est une erreur :
Le système peut fonctionner jusqu'à ce point, indiquant que le programme a été en mesure de recevoir et de renvoyer avec succès des informations. L'erreur sur la page doit être une erreur dans la balise personnalisée wst:ads, ce qui a entraîné le renvoi d'aucun contenu. Nous avons suivi la méthode de dépannage ci-dessus et avons continué à revenir au débogage. Il s'est avéré que nous avions oublié de configurer l'étiquette lors de la mise à niveau. Nous ouvrons le modèle, ajoutons le code 'taglib_pre_load' => 'wstmartcommonTaglibWst', puis actualisons la page :
C'est encore une erreur familière, mais cette fois c'est une autre fonction , pour les erreurs qui ont déjà trouvé des solutions, nous pouvons les résoudre facilement, nous ne les répéterons donc pas. En gros, modifiez simplement la fonction de requête dans le modèle. Après avoir effectué les modifications selon la méthode précédente, nous pouvons terminer la mise à niveau de Thinkphp 5.0 vers 5.1.
En raison de l'espace limité, je ne prendrai pas de captures d'écran une par une pour le débogage. Avant la mise à niveau, tout le monde devrait lire le guide de mise à niveau officiel de thinkphp pour éviter de remplir une fosse après l'autre comme moi avant de terminer la mise à niveau.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!