Cet article vous apporte des connaissances pertinentes sur thinkphp. Il organise principalement certaines fonctions couramment utilisées, notamment l'obtention de données de formulaire, la définition du mode multi-application, le rendu des modèles et d'autres contenus connexes. Jetons-y un coup d'œil ensemble. .
Apprentissage recommandé : "Tutoriel vidéo PHP"
Miroir Ali : composer config -g repo.packagist composer https://mirrors. aliyun.com /composer/
Miroir Laravel Chine : composer config -g repo.packagist composer https://packagist.laravel-china.org
Miroir complet Chine : composer config -g repo.packagist composer https ://packagist.phpcomposer.com9
Dans le cas du cloud de code ou du téléchargement git, il s'avère qu'il n'y a pas de fournisseur et il ne peut pas exécuter
composer install --ignore-platform-reqs
ou
composer update - -ignore-platform-reqs
1. Téléchargez tp6
composer create-project topthink/think tp
2 Définissez le mode multi-application
tp6 par défaut sur un accès à une seule application et entre dans le app/controller par défaut. Si vous devez effectuer un développement multi-applications (par exemple : http://***.com/admin, http://***.com/index), vous devez activer le mode multi-application.
composer requiretopthink/think-multi-app
php think build nom de l'application (exemple : index ou admin)
3. Rendu du modèle
tp3: $this->display();tp5: return $this->fetch();tp6: return View::fetch('index');
tp6 manque de nombreux packages de dépendances par défaut et doit être téléchargé
composer nécessite topthink/think-view
Introduction au contrôleur
utilisez thinkfacadeView;
4. Redirection de saut de modèle
composer nécessite liliuwei/thinkphp-jump
Introduction au contrôleur
Introduction à l'en-tête : utilisez liliuweithinkJump;
Intra -introduction de la classe : utilisez Jump ;
Si une erreur est signalée :
Afficher app/config/ Jump.php a-t-il des paramètres :
'dispatch_success_tmpl' => app()->getRootPath().'/vendor/qeq66/think-jump/template/jump.html','dispatch_error_tmpl' => app()->getRootPath().'/vendor/qeq66/think-jump/template/jump.html'
5 Obtenir les données du formulaire
Le contrôleur introduit
use think\facade\Request;$code = Request::param('code');
ou
$code = input("code");
. 6. Le code de vérification numérique
composer nécessite topthink/think-captcha
dans le répertoire de l'application. Recherchez le fichier middleware global middleware.php et activez le code thinkmiddlewareSessionInit::class commenté ci-dessous
7. images
composer require topthink/think-image
8. mysql select query
Transition à partir de tp5, la requête de sélection par défaut renvoie un tableau à deux dimensions et tp6 renvoie un ensemble de données bien que le responsable l'ait dit. est fondamentalement la même chose que les opérations sur les tableaux
, mais parfois les tableaux sont toujours utiles, par exemplear r[k][0] = "test" Ce type de modification indirecte signalera une erreur dans l'ensemble de données renvoyé par défaut, mais les tableaux peuvent être utilisés de cette manière
1,
db::name('ceshi')->select()->toArray();
2 ,
Modifiez le BaseQuery.php de /vendor/topthink/think-orm/src/ db dans le répertoire tp6
L'exemple de modification est comme indiqué sur l'image, supprimez la case rouge dans l'image et ajoutez
$resultSet = $this->connection->select($this);
Ajoutez une ligne ci-dessous
return $resultSet;
9 Pagination
$list = db::name('admin_menu')->where($where)->paginate(['list_rows'=> 10,'query' => request()->param(),]);
Utilisez le. paginate pour obtenir les données de pagination et interroger la valeur d'indice qui ne peut pas être ajoutée à la collection
Les conditions de requête doivent ajouter 'query' => request()->param( ),
Solution :
php côté :
// An highlighted block$list = db::name('admin_menu')->where($where)->paginate(['list_rows'=> 10,'query' => request()->param(),]);$new_arr = array();foreach($list as $k=>$v){$v[$k]['erji_menu'] = “案例”;$new_arr[] = $v;} // 获取分页显示$page = $list->render();// 模板变量赋值View::assign('list', $new_arr);View::assign('page', $page);
côté HTML
{$page|raw}
modification de la classe de référence de pagination
tp6vendortopthinkthink-ormsrcpaginatordriverBootstrap.php
10 Nouvelle différence de données
La méthode de sauvegarde tp5 de contraste est utilisée pour mettre à jour la méthode d'ajout est utilisée. ajouter
tp6 save est à la fois la mise à jour et la méthode d'ajout d'ajout est supprimée
db::name('ceshi')->where(array('tz_id'=>$post['tz_id']))->save($users);db::name('ceshi')->save($users);
Ajouter la clé primaire où est la mise à jour sans clé primaire mais ajouter, mais il y aura des problèmes si l'exécution réussit, seulement 0,1 sera renvoyé
Non renverra l'identifiant de clé primaire des données ajoutées comme la méthode d'ajout tp5
/** * 插入记录 * @access public * @param array $data 数据 * @param boolean $getLastInsID 返回自增主键 * @return integer|string */public function insert(array $data = [], bool $getLastInsID = false){ if (!empty($data)) { $this->options['data'] = $data; } return $this->connection->insert($this, $getLastInsID);}
La méthode d'ajout a été remplacée par la méthode d'insertion Bien que le commentaire indique qu'elle renvoie la clé primaire à incrémentation automatique, je n'ai toujours pas obtenu la méthode d'insertion. clé primaire à incrémentation automatique lorsque j'ai testé ici. Je ne suis pas sûr que ce soit un problème de version. Ou quoi ?
. Si vous ne parvenez pas à l'obtenir, vous pouvez uniquement continuer à chercher et découvrir qu'il existe un insertGetId que vous pouvez obtenir. C'est-à-dire que afin de développer rapidement, nous utilisons généralement save pour résoudre le problème. Lorsque nous avons besoin d'obtenir la clé primaire auto-incrémentée, nous la modifions en insertGetId.
11、tp6 高级查询and和or同时使用
tp6针对and查询和or查询有快捷方法
但是这些快捷方法会有很多局限性,当我们对数据进行一系列的复杂查询时这些快捷方法就会出现很多问题例如:
$where1[] = ["order_khname","like",'%'.$keywords.'%'];$where2[] = ["order_khqq","like",'%'.$keywords.'%'];$where3[] = ["order_khmobile","like",'%'.$keywords.'%'];$where[] = ["order_type","=",$ddzt];$list = db::name('ceshi') ->where($where) ->whereOr([$where1,$where2,$where3]) ->paginate([ 'list_rows'=> 10, 'query' => request()->param(), ]);
这里我们想要的sql格式为:
SELECT * FROM `dc_ceshi` WHERE `order_type` = 0 and ( ( `order_khname` LIKE '%1%' ) OR ( `order_khqq` LIKE '%1%' ) OR ( `order_khmobile` LIKE '%1%' )) LIMIT 0,10
实际生成的格式为:
SELECT * FROM `dc_ceshi` WHERE `order_type` = 0 OR ( `order_khname` LIKE '%1%' ) OR ( `order_khqq` LIKE '%1%' ) OR ( `order_khmobile` LIKE '%1%' ) LIMIT 0,10
这里就可以用到闭包查询(注:这只是我学习tp6的时候遇到的问题然后在tp6文档里面找到的解决方式,直接用原生sql也是可以解决,把where条件直接改成一个自定义的字符串也可以解决,用tp5的连接方式也应该可以但是我没试)
$list = db::name('ceshi') ->where(function ($query) use ($keywords){ $query->where("order_khname","like",'%'.$keywords.'%') ->whereOr("order_khqq","like",'%'.$keywords.'%') ->whereOr("order_khmobile","like",'%'.$keywords.'%'); }) ->where($where) ->paginate([ 'list_rows'=> 10, 'query' => request()->param(),]);
这时候得到sql格式为:
SELECT * FROM `dc_ceshi` WHERE ( `order_khname` LIKE '%1%' OR `order_khqq` LIKE '%1%' OR `order_khmobile` LIKE '%1%' ) AND `order_type` = 0 LIMIT 0,10
已经满足了我的需求,但是还是有一个问题就是如果keywords这个变量没有值的时候他查询的语句格式为:
SELECT * FROM `dc_ceshi` WHERE ( `order_khname` LIKE '%%' OR `order_khqq` LIKE '%%' OR `order_khmobile` LIKE '%%' ) AND `order_type` = 0 LIMIT 0,10
这种情况只需要在加个if判断:
$list = db::name('ceshi') ->where(function ($query) use ($keywords){ if($keywords){ $query->where("order_khname","like",'%'.$keywords.'%') ->whereOr("order_khqq","like",'%'.$keywords.'%') ->whereOr("order_khmobile","like",'%'.$keywords.'%'); } }) ->where($where) ->paginate([ 'list_rows'=> 10, 'query' => request()->param(),]);
12、tp6 find查询变动
tp5、tp3我们查询一个表是否存在数据可以直接查询一条
$datafind = db::name('ceshi')->find();
tp6 find查询必须增加where条件或者order排序,为什么不知道。有大神知道指点下O(∩_∩)O哈哈~
$datafind = db::name('ceshi')->order('ID DESC')->find();
推荐学习:《PHP视频教程》
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!