如何在laravel routes.php里获取控制器和action名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在laravel routes.php里获取控制器和action名称相关的知识,希望对你有一定的参考价值。

 添加进去代码以后,根据提示找到Controller.class.php,手动添加如下代码:
  /**
  * 获取当前Action名称
  * @access protected
  */
  protected function getActionName()
  if(empty($this->name))
  // 获取Action名称
  $offset=strrpos(get_class($this), '\\', -10); // 从尾部第 10 个位置开始查找
  $this->name = substr(get_class($this),$offset+1,-10);
  
  return $this->name;
  
  复制代码
  然后在可以在控制器中使用routes.php方法获取控制器名称了
参考技术A

看看这个是否可以解决你的问题  

http://www.bcty365.com/content-153-5937-1.html

Lumen:在 routes.php 第 17 行:升级到 5.5 后调用未定义的方法 Laravel\Lumen\Application::post()。*

【中文标题】Lumen:在 routes.php 第 17 行:升级到 5.5 后调用未定义的方法 Laravel\\Lumen\\Application::post()。*【英文标题】:Lumen: In routes.php line 17: Call to undefined method Laravel\Lumen\Application::post(), after upgrade to 5.5.*Lumen:在 routes.php 第 17 行:升级到 5.5 后调用未定义的方法 Laravel\Lumen\Application::post()。* 【发布时间】:2020-09-29 02:37:45 【问题描述】:

我正在从事需要将 Lumer 版本从 5.1.* 升级到 7.* 的项目。

但我一直停留在5.4.*5.5.* 版本。在5.4.* 中运行内置php 服务器php -S localhost:8000 -t ./public 并访问URL http:\\localhost:8000 时,出现以下错误:

Call to undefined method ...\Application->welcome()

但我升级到下一个版本希望能解决这个问题,因为我没有更改vendor 文件夹之外的任何文件。

但是在我升级到 Lumen 5.5.* 版本之后,现在当我运行任何 php artisan 命令时,我收到以下错误:

In routes.php line 17:
  Call to undefined method Laravel\Lumen\Application::post()

谁能分享一下问题出在哪里以及如何解决上述两个错误?

这是项目的 composer.json 文件,以防万一:


    "name": "laravel/lumen",
    "description": "The Laravel Lumen Framework.",
    "keywords": ["framework", "laravel", "lumen"],
    "license": "MIT",
    "type": "project",
    "require": 
        "php": ">=5.5.9",
        "laravel/lumen-framework": "5.5.*",
        "vlucas/phpdotenv": "~2.2"
    ,
    "require-dev": 
        "phpunit/phpunit": "~4.0"
    ,
    "autoload": 
        "psr-4": 
            "App\\": "app/"
        ,
        "classmap": [
            "database/"
        ]
    ,
    "autoload-dev": 
        "classmap": [
            "tests/"
        ]
    ,
    "config": 
        "preferred-install": "dist"
    

app/Http/routes.php:

<?php
    date_default_timezone_set('America/Chicago');
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/


//$app->group(['middleware' => 'FilterInput'], function($app) 

    $app->post('app_details', ['as' => 'app_details', 'uses' => 'App\Http\Controllers\Details@set_app_details']);
    $app->post('phone_details', ['as' => 'phone_details', 'uses' => 'App\Http\Controllers\Details@set_phone_details']);
    $app->post('app_search', ['as' => 'from_search', 'uses' => 'App\Http\Controllers\Details@set_search_details']);
    $app->post('app_lead', ['as' => 'from_search', 'uses' => 'App\Http\Controllers\Details@set_lead_details']);
    $app->post('survey', ['as' => 'survey', 'uses' => 'App\Http\Controllers\Survey@set_data']);


    //capture all routes regardless
    $app->get('path:.*', function() use ($app) 
        return $app->welcome();
    );

//);

bootstrap/app.php摘录:

...
...
require __DIR__.'/../app/Http/routes.php';

return $app;

【问题讨论】:

请出示您的路线文件好吗? @aynber 更新了问题.. 【参考方案1】:

如您所见,here $app 已不再使用,而是使用 $router

$router->get('/', function () use ($router) 
    return $router->app->version();
);

以前的版本是this

通过将$app 替换为$router 来更新路由后; bootstrap/app.php变成了这样

$app->router->group(['namespace' => 'App\Http\Controllers'], function ($router) 
    require __DIR__ . '/../app/Http/routes.php';
);

【讨论】:

是的,当我参考文档时,我稍微看了一眼,即使我按照你提到的那样在 app/Http/routes.php 中进行了更改,但错误 Call to undefined method Laravel\Lumen\Application::post() 仍然没有t 走开,我是否需要在此更改后重新运行任何命令? 在这里; lumen.laravel.com/docs/5.5/upgrade请在页面中搜索“Updating The Bootstrap File” - 有bootstrap/app.php@VickyDev等详细信息 是的,现在我明白你的意思了,但我很困惑,我的项目只包含 Lumen 框架,我没有在代码库中看到 Laravel 以及它,所以话虽如此,我也没有../routes/web.php 文件,因为那是 Laravel 特有的,你能建议我应该把什么放在那里吗?您还可以更新您的答案以包括 bootstrap/app.php 更改,并提供比文档更详细和正确的解释吗? @VickyDev Laravel 和 Lumen 共享大部分组件——甚至 lumen 文档的某些部分说“去检查 laravel 文档”。请编辑/分享您的 bootstrap/app.php 文件(仅“加载应用程序路由”部分)和您的路由文件的位置 请检查更新的问题,我也只有默认的 routes.php 文件,即app/Http/routes.php

以上是关于如何在laravel routes.php里获取控制器和action名称的主要内容,如果未能解决你的问题,请参考以下文章

新 Laravel 项目中缺少 routes.php 文件

Lumen:在 routes.php 第 17 行:升级到 5.5 后调用未定义的方法 Laravel\Lumen\Application::post()。*

Redirect::action() - Routes.php Laravel 中的未知操作异常

Laravel:如何路由到公共文件

获取“?” Laravel 中的变量

使用 Laravel 从 API 获取 JSON 响应