request()->controller获取的是个类名,能把控制器的名字返回么?

如果

问题描述

这里写问题描述
如题。比如路由/admin/article/index,用request()->controller获取的值希望是article。而不是App\Admin\Controller\ArticleController这种。
或者,是不是有其他框架内已经写好的方法

669 3 0
3个回答

yongdao35

估计没有,否则这些控制器
App\Admin\Controller\ArticleController
App\Api\Controller\ArticleController
App\User\Controller\ArticleController
都叫article,就乱了
自己封装个函数截取呗

  • 如果 2022-11-25

    谢谢,目前只能这么实现了

powerbowen

截图
截图

    /**
     * @param Request $request
     * @return \support\Response
     */
    public function index(Request $request): \support\Response
    {
        return json($this->getClassName());
    }

    /**
     * @return string
     */
    private function getClassName(): string
    {
        $classFile = debug_backtrace()[1]['class'];
        $map = explode('\\', $classFile);
        $class = is_array($map) ? array_pop($map) : $map;
        return str_replace('Controller', '', $class);
    }
wolfcode

$controllerClass = request()->controller;
strtolower(substr($controllerClass, strrpos($controllerClass, '\') + 1));

  • 如果 2022-11-25

    谢谢您。这个方法比较简单

  • 如果 2022-11-25

    这个好像没有考虑到Controller后缀的情况。我已经自己加了替换了。
    $controllerMap = explode('\',request()->controller);
    $controller = strtolower(str_replace(config('app.controller_suffix'),'',end($controllerMap)));

  • powerbowen 2022-11-25

    get

  • wolfcode 2022-11-25

    参考

    https://www.workerman.net/q/8083
    论坛里面有很多答案 可以提前搜索

年代过于久远,无法发表回答
🔝