ThinkPHP支持传统的MVC(Model-View-Controller)模式以及流行的MVVM(Model-View-ViewModel)模式的应用开发。
模型-视图-控制器(MVC)是一种设计创建 Web 应用程序的模式。
MVC指MVC模式的某种框架,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
Model-View-ViewModel,本质是MVC 的改进版。MVVM 将MVC中View 的状态和行为抽象化,把视图 UI 和业务逻辑分开。
MVC模式在一定程度上依赖于另外一项关键技术:模板引擎,如常见的jsp页面和php页面;
其实模板引擎技术并不复杂,而是繁琐,基本原理就是前端HTML中写关键字符以期承载数据,然后再交由后台将前端HTML代码中的关键字符进行匹配,替换为真实数据;
模板引擎的关键点并不是技术,而是在一定程度上解脱了后台程序员,他们不再写页面和JS脚本了,这些工作大部分交给专业的前端工程师来完成,后台只需要在页面完成后读取并交由模板引擎进行二次处理即可;这基本就实现了代码工程的分离;
而且MVC的设计模式也是相对灵活的,对于小型技术团队来说,C层与M层的分离其实并不彻底,逻辑与数据之间的处理大部分情况下依然交与后台完成,逻辑层与数据层仅仅实现了代码逻辑上的分离,并没有实现工程上的分离。
public目录为唯一的web可访问目录,入口文件默认为index.php
(1)在app文件夹下,新建两个文件夹:index(前台)和admin(后台),把controller文件夹复制分别放入两个文件夹中。
(2)进入index/controller/index.php,修改路径:(admin下同理)
(3)打开文件夹 config->app.php:
插入一行代码:
'auto_multi_app' => true,//自动多应用模式
修改一行代码:
// 显示错误信息
'show_error_msg' => true,
(5)网址访问的正确路径是:http://localhost/tp/public/index.php/index 以及admin
解释:
public是框架的控制,总入口文件默认是public下的index.php,你要告诉public/index.php你要跳转到哪,然后它会在app下找文件夹和控制器,/public/index.php/admin就是找admin文件夹,然后默认找admin/controller下的第二入口文件index.php,执行了admin下的index后,由这个index来决定下一个跳转向哪里(view页面或者直接return输出再或者别的操作)
附:
辨识化命名:修改文件名和类名
然后修改访问地址:将分别访问到两个方法
解释:
localhost/tp相当于http://www…com域名,/public/index.php为默认入口。
/admin/admin/index则为该网站下的具体路径:admin模块下,admin控制器下,index方法(操作,index可略,其他必写)。
在开发阶段建议开启框架的调试模式,虽然牺牲一些执行效率,但是大大提高了排错的能力。等项目部署到生产环境时,再关闭调试模式即可。
(1)在tp根目录下有一个环境配置文件 .example.env,我们删除前面的 . example,再刷新网页:
此时,网页报错显示详细信息,且右下角为Trace调试图标,说明调试成功开启。
(2)查看.env文件,打开调试的环境变量:true / false
(1)修改数据库文件:
打开.env文件修改DATABASE、USERNAME、PASSWORD。
打开config/database文件修改同上,以及
// 默认使用的数据库连接配置: 'default' => env('database.driver', 'mysql')
,修改 ‘database.driver’ 为’database.type’ (意为读取env里的TYPE)
注:.env数据库为本地配置,config/database数据库配置为实际工程,我们做本地配置,优先级是.env先,当.env信息为空才读取database文件信息。
(2)app/controller/ 创建一个DataTest.php,访问 http://localhost/tp/public/index.php/datatest
namespace app\controller;
use think\facade\Db;
class DataTest
{
public function index()
{
$user = Db::table('wp_options')->select();//()表名
return json($user);//火狐浏览器看到json()列表效果
}
}
创建第二个数据库:
(1)打开.env文件增加一行DATABASE2 = 库名(如果用户名什么变了当然也要改)
(2)打开config/database文件,增加数据库2模块:
(3)在DataTest.php添加以下代码:
namespace app\controller;
use think\facade\Db;
class DataTest
{
public function index()//默认选中的http://localhost/tp/public/index.php/datatest/,可有可无index
{
$user = Db::connect('mysql')->table('basedata')->select();//table()表名
return json($user);//firefox看到json()列表效果
}
public function userdemo()//第二个数据库:访问http://localhost/tp/public/index.php/datatest/userdemo必加
{
$user = Db::connect('userdemo')->table('usertest')->select();//connect()对应database.php的头 table()表名
return json($user);
}
}
模板引擎支持普通标签和XML标签方式两种标签定义,分别用于不同的目的.
创建模板文件https://www.bilibili.com/video/BV1Wt411M7qe?p=5
路由就是名词 访问地址,动词“路由到”-“地址转到-”
(2)浏览器的开发者工具看不到console.log
谷歌和火狐不同,火狐f12查看console没有看到链接错误的信息是因为没有打开。