【问题标题】:Laravel controller with included files issue包含文件问题的 Laravel 控制器
【发布时间】:2018-09-25 11:59:03
【问题描述】:

为了在控制器中整合一些庞大的代码,我已经能够在函数内部执行此操作

public function myCustomFunction(Request $request){
 include(app_path() . '/myFunctions/myCustomFunction1.php');
}

它确实成功了,但是通过包含,我注意到它没有携带名称空间和/或控制器中设置的其他变量。

如果它只是一个它需要的简单模型,我可以添加

Use \App\myModel;

到控制器的顶部,它运行代码就像它是控制器的一部分一样。

我遇到的问题是当我想运行验证时。我不知道在包含的页面上“使用”什么来工作。

如果我在控制器中运行我的逻辑而不做包含它可以工作,但如果放在包含它不会,我也不会出错。

我在包含页面中尝试了这个以从内部激活验证 包含文件

namespace App\Http\Controllers;
use Validator;
use Request;

模仿原始控制器,但仍然无法正常工作。我正在尝试做的事情是否可能,但我做错了什么?还是我在做一些永远不会奏效的事情?如果一切都失败了,我可以将代码保留在实际控制器中以使其工作,但我试图在复杂控制器上实现某种清晰度。比如……

public function myCustomFunction(Request $request){
    if(request('value1')=='1'){
      include(app_path() . '/myFunctions/myCustomFunction1.php');
    }else{
      include(app_path() . '/myFunctions/myCustomFunction2.php');
    }
}

这个结构已经在处理不需要验证的任何东西,所以我希望有一种简单的方法可以将包含页面连接到原始控制器可以访问的同一组验证工具中。

【问题讨论】:

  • Laravel 应用使用 composer 所以你可以使用stackoverflow.com/questions/24171078/…
  • 是的,我不想每次都自动加载它。它很少使用,所以我对一个解决方案很感兴趣,让我只在需要时手动包含它
  • 将函数放在一个类中,让自动加载处理它。据我所知,通过 PSR-4 自动加载器(composer 也有)自动加载是懒惰的
  • 另外,如果性能是一个问题,那么启用 OpCache 。在启用 OpCache 时加载文件并不是一项昂贵的操作。
  • 谢谢,我是 laravel 的新手,这已经超出了我的想象。我想也许如果我知道在包含页面顶部“使用”的正确目录我可以解决,但只是将整个混乱留在控制器中不是问题,只是丑陋

标签: javascript php jquery laravel


【解决方案1】:

在控制器中,因此包含错误的文件。最好在 app 文件夹中创建一个 Helpers 文件夹,在其中使用您的函数创建类。

namespace App\Helpers;

class HelpersOne {
  public function myFunctionOne(){.../*youre code*/}
  public function myFunctionTwo(){.../*youre code*/}
}

并且已经在您的控制器中,您可以调用这些类。

use App\Helpers\HelpersOne;
...
public function myCustomFunction(Request $request){
    if(request('value1')=='1'){
      $myFunction = new HelpersOne();
      $myFunction->myFunctionOne(); 
    }else{
      $myFunction = new HelpersTwo();
      $myFunction->myFunctionTwo(); 
    }
}

【讨论】:

  • 这个答案的第 1 部分在哪里?我在哪里放置命名空间 App\Helpers; classHelpersOne{public function(){../*我的代码*/}}
  • @weekapaug 在 app 文件夹中,创建一个 Helpers 文件夹。例如,在 Helpers 文件夹中创建 HelperOne.php。并且已经在这个文件中安装了这个命名空间
  • 好的,我得到了 helpers 文件夹,并在里面创建了文件 helpersOne.php。那么在 HelpersOne.php 中我是否放置了命名空间 App\Helpers 等?
  • @weekapaug 完全正确
  • 好的,所以我完全按照说明做了,我得到了这个... app\http\controllers\helperone not found。这不是错字,我验证了区分大小写。它不在控制器文件夹中,而是在应用程序文件夹中
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 2014-10-30
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2014-12-27
  • 2021-10-24
  • 1970-01-01
相关资源
最近更新 更多