为了巩固控制器中的一些庞大代码,我已经能够在函数
中执行此操作public function myCustomFunction(Request $request){
include(app_path() . '/myFunctions/myCustomFunction1.php');
}
它确实成功地工作但是通过做include,我注意到它没有携带控制器中设置的命名空间和/或其他变量。
如果它只是一个简单的模型,我可以添加
Use \App\myModel;
到控制器的顶部,它运行代码就好像它是控制器的一部分一样。
我遇到的问题是我想要运行验证。我无法弄清楚在“包含”页面上“使用”的内容。
如果我在控制器中运行我的逻辑而不执行包含它可以工作,但是如果放入包含它没有,我也没有错误。
我在include页面中尝试了这个,以从内部激活验证 包含文件
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');
}
}
这个结构已经在处理任何不需要验证的东西,所以我希望有一种简单的方法可以将include页面挂钩到原始控制器可以访问的同一组验证工具中。
答案 0 :(得分:2)
在控制器中,错误地包含文件。您最好在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();
}
}