doOne()
那么如何在不传递注入资源的情况下从doALot()
调用Request
,但doOne()
中有$request
? <{1}}遍布整个地方感觉不好。
解决方案tl; dr不可能,但还有其他方法 - 阅读Alexey Mezenin的简短回答
长版(可能不是最好的)。
$ php artisan make:provider SomeServiceProvider
然后在创建的提供者编辑register()
中调用某些内容:
public
function register() {
$this -> app -> bind('App\Services\SomeService', function ($app) {
return new SomeService();
});
}
然后继续创建将资源注入属性的服务类。
<?php
namespace App\Services;
use \Illuminate\Support\Facades\Request;
class SomeService {
private $request;
/**
* SomeService constructor.
*/
public
function __construct(Request $request) {
$this -> request = $request;
}
public function doOne($someOtherVariable) {}
}
然后将您的方法从控制器移动到服务,并将服务注入控制器。
权衡:( - )两个无用的文件来执行基本功能,(+)从控制器中分离逻辑实现,(〜)可能更干净的代码。
答案 0 :(得分:2)
手动调用控制器操作不是一个好主意。业务logic should be in the service class。您可以在我的Laravel最佳实践回购中看到这样的示例。如果您不想每次都传递if(current time is in the given range)
yourButton.Enabled = True
else
yourButton.Enabled = False
对象,可以在服务类或控制器构造函数中注入$request
类。
使用Request
数据的另一种方法是使用Request
帮助程序:
request()
或request('key')
request()->has('key')
门面:
Request
或者你可以在方法中手动注入它:
Request::has('key')