thinkphp 6-8多应用下使用注解路由

前言

在tp8默认规则下使用注解路由默认只在app\controller 初始化创建的控制器中才会生效 并且不在使用/***/注解方式 而是采用php8 #[Route(“get” , ‘index/index’)] 的方式

注解路由

ThinkPHP支持使用注解方式定义路由(也称为注解路由),如果需要使用注解路由需要安装额外的扩展:

composer require topthink/think-annotation

然后只需要直接在控制器类的方法注释中定义,例如:

<?php
namespace app\controller;

use think\annotation\route\{Group , Route};
#[Group("index")]
class Index
{
    /**
     * @param  string $name 数据名称
     * @return mixed
     */
    #[Route('GET','test/hello/:name')]
	public function hello($name)
    {
    	return 'hello,'.$name;
    }
}

然后我们在命令行输入

php think route:list

在这里插入图片描述
以上我们可以看出 路由规则已经被读取到了

最后我们访问一下
http:/localhost//index/test/hello/thinkphp
在这里插入图片描述
此时 我们可以看到 路由已经生效了

多应用模式下如何使用路由

当我们创建一个admin应用时

<?php
declare (strict_types = 1);

namespace app\admin\controller;

use think\Request;
use think\annotation\route\{Group , Route};
#[Group('api')]
class IndexController
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    #[Route('get' , 'login')]
    public function login()
    {
        echo 'hello admin thinkphp 8';
    }

}

我们查询一下路由 是否生效

php think route:list

在这里插入图片描述
看来是没有生效
原因:

在 topthink/think-annotation 规则中 默认的是app/controller 哪怕你创建一个app/index 模块 它同样不生效
因为在 thinkphp 除了 默认的controller 以外 都属于多应用模式
那我们如何让 admin 应用生效

第一步

在创建 composer require topthink/think-annotation 的同时,也会在config 目录中创建一个annotation.php 文件

<?php

return [
    'inject' => [
        'enable'     => true,
        'namespaces' => [],
    ],
    'route'  => [
        'enable'      => true,
        'controllers' => [
        ],
    ],
    'model'  => [
        'enable' => true,
    ],
    'ignore' => [],
];

第二步

我们在config/annotation.php 文件中修改 route 配置

<?php

return [
    'inject' => [
        'enable'     => true,
        'namespaces' => [],
    ],
    'route'  => [
        'enable'      => true,
        'controllers' => [
            app_path() . 'admin/controller' => [
                'middleware' => [],
            ],
        ],
    ],
    'model'  => [
        'enable' => true,
    ],
    'ignore' => [],
];

既 让注解路由读取 绝对路径/app/admin/controller 控制器层

php think route:list

在这里插入图片描述

ps 注意

#[group(‘名称’)] 不要设置为和应用名一样 不然你还是在访问默认的控制器 而不是注解路由中的route

当你完成此步骤时 并且看到路由已经生效 那么恭喜你 你已经完成了此全部能容 并且已经可以让多应用模式下使用注解路由生效了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用 开发和简化企业级应用开发而诞生的。拥有众多的优秀功能和特性,经历了三年多发展的同时,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和 改进,众多的典型案例确保可以稳定用于商业以及门户级的开发。 ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特性包括: 采用容器统一管理对象 支持Facade 注解路由支持 路由跨域请求支持 配置和路由目录独立 取消系统常量 助手函数增强 类库别名机制 增加条件查询 改进查询机制 配置采用二级 依赖注入完善 支持PSR-3日志规范 中间件支持(V5.1.6+) Swoole/Workerman支持(V5.1.18+) ThinkPHP5的运行环境要求PHP5.6以上,兼容PHP8.0。 更新日志: V5.1.40 LTS(2020-10-09) 本版本为常规更新,主要包括: 改进redis驱动`has`方法 修正XA事务 修正`HasManyThrough`关联 增加mysql json类型字段->>方式获取支持 改进路由加载 避免加载编辑器临时文件影响 修复关联模型的属性直接附加到当前模型,当关联模型字段名为name时获取的值为模型的属性name值 修复多态关联预加载`field`无效 改进Collection类的`column`方法的PHP兼容性问题 改进mysql驱动 改进`parseclosure`方法 SoftDelete删除条件做空判断 改进验证类`append`方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

php肖彬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值