您的当前位置:首页正文

ThinkPHP 5: 创建控制器、模板,并调用

来源:花图问答

1.0、创建控制器(controller)

ThinkPHP 5.0 创建一个控制器,非常简单,需要注意的是命名空间必须要与所谓路径相一致。

配置文件 config.php 中,默认指定了应用的命名空间为 "app"。 配置选项为:"app_namespace" => 'app'。

这等于说,应用目录所在的命名空间就是 app。新建一个控制器时,命名空间就是从 app 开始。

<?php
    // 不继承 \think\Controller 的简单控制器
    namespace app\controller;
    class Index {
        
        public function index()
        {
            echo "我是控制器";
        }
        
        public function render()
        {
            echo "通过调用助手函数 view()来处理模板文件";
            return view();
        }

        public function render_fix()
        {   
            // 通过给函数 view 传送参数,调用指定的路径中模板文件.
            // fix.html 会默认是 index/fix.html
            // 如果需要指定目录,那需要加上目录,如: test/fix.html.
            return view('fix.html');
        }
    }
?>

注意:

ThinkPHP 5 完整版,应用默认配置就是支持多模块设置 'app_multi_module' => true 。

 // 是否支持多模块
    'app_multi_module'       => true,

模块设置:默认模块为 index, 默认控制器 Index,默认操作 index。配置选项如下:


    // 默认模块名
    'default_module'         => 'index',
    // 禁止访问模块
    'deny_module_list'       => ['common'],
    // 默认控制器名
    'default_controller'     => 'Index',
    // 默认操作名
    'default_action'         => 'index',
    // 默认验证器
    'default_validate'       => '',
    // 默认的空控制器名
    'empty_controller'       => 'Error',
    // 操作方法后缀
    'action_suffix'          => '',
    // 自动搜索控制器
    'controller_auto_search' => false,

所以,如果你是在模块中,添加新的控制器,声明命名空间时,必须加上模块名称,如:

<?php
  namespace app\index\controller;
 
  class Login
  {
      public function index() {
          // ....
      }
  }

1.1 URL 访问控制器

1.2 创建一个模板文件,并通过视图调用该模板文件。
(如果想要实现控制器方法自动调用,那么就应该在模块下的 view 目录中,新建与控制器名称相同的目录,并在该目录下创建与方法名相同的模板文件)

场景:给 index 模块中的控制器 Index 中的操作 index,添加一个模板文件。
操作:现在 index 模块中,添加一个 view 目录,再创建一个 index 目录,最后新建一个 index.html 模板文件。

创建模板文件有很多种方式,上面的方式可以实现在控制器中,视图不必指定模板文件路径,框架就会自动调用。

1.3 控制中调用模板文件
调用模板文件的方式有两种,一种是继承 \think\Controller,通过 $this->fetch('模板相对路径/模板绝对路径') 调用;另一种是直接使用 view(‘模板相对路径/模板绝对路径’) 函数。

不指定模板路径,都会默认按照 “当前模块/控制器名/操作名.html” 路径进行查找使用。
$this->fetch();(注意:必须继承 \think\Controller)
如果不继承,可以直接使用函数 view() 调用模板


魔术方法:

CLASS , 获取当前类

FUNCTION, 获取当前的方法