Php - Laravel 中正确的依赖注入方式
Dependency Injection the right way in Php - Laravel
我有一个日志 class 如下,我想将下面 class 注入我的控制器并创建一个日志:
Log.php
<?php
namespace App\Helpers;
use DB;
class Log {
private $tableName;
private $tableId;
private $tableIdVal;
private $step;
private $status;
private $error;
public function __construct($logTableName, $logTableId, $logTableIdVal, $step, $status, $error = null) {
$this->tableName = $logTableName;
$this->tableId = $logTableId;
$this->tableIdVal= $logTableIdVal;
$this->step = $step;
$this->status = $status;
$this->error = $error;
}
protected function create() {
DB::table($this->tableName)->insert(
[
$this->tableId => $this->tableIdVal,
'step' => $this->step,
'error' => $this->error,
'status' => $this->status
]
);
}
}
Testcontroller.php
<?php
namespace App\Http\Controllers;
use App\Helpers\{Load, Log};
use App\Models\{Post, Raw, RawDetail};
use DB;
class DetailsController extends Controller
{
private $file;
private $log;
public function __construct($record, Log $logger) {
$this->file = $record;
$this->log = $logger;
}
public function process() {
//make a log (is this correct?) I think $this->log will find a log method in this file, which does not exist.
//I want to simple make a call to the constructor and then call create method on it.
$this->log('raw_logs', 'raw_id', $this->file->id, Raw::STEP_1, Raw::STATUS_1);
如果我正在使用依赖注入,我应该如何进行上述操作?
我可以这样做:
$log = new Log($all-params-here);
$log->create();
但我想避免使用新的。
我想做什么。
$this->log($parameters)->create();
- 你可以像@HtmHell 在评论中说的那样做:
$this->log->create(parameters);
- 您创建方法链接 ex:
$this->log->setData($parameters)->create();
我有一个日志 class 如下,我想将下面 class 注入我的控制器并创建一个日志:
Log.php
<?php
namespace App\Helpers;
use DB;
class Log {
private $tableName;
private $tableId;
private $tableIdVal;
private $step;
private $status;
private $error;
public function __construct($logTableName, $logTableId, $logTableIdVal, $step, $status, $error = null) {
$this->tableName = $logTableName;
$this->tableId = $logTableId;
$this->tableIdVal= $logTableIdVal;
$this->step = $step;
$this->status = $status;
$this->error = $error;
}
protected function create() {
DB::table($this->tableName)->insert(
[
$this->tableId => $this->tableIdVal,
'step' => $this->step,
'error' => $this->error,
'status' => $this->status
]
);
}
}
Testcontroller.php
<?php
namespace App\Http\Controllers;
use App\Helpers\{Load, Log};
use App\Models\{Post, Raw, RawDetail};
use DB;
class DetailsController extends Controller
{
private $file;
private $log;
public function __construct($record, Log $logger) {
$this->file = $record;
$this->log = $logger;
}
public function process() {
//make a log (is this correct?) I think $this->log will find a log method in this file, which does not exist.
//I want to simple make a call to the constructor and then call create method on it.
$this->log('raw_logs', 'raw_id', $this->file->id, Raw::STEP_1, Raw::STATUS_1);
如果我正在使用依赖注入,我应该如何进行上述操作?
我可以这样做:
$log = new Log($all-params-here);
$log->create();
但我想避免使用新的。
我想做什么。
$this->log($parameters)->create();
- 你可以像@HtmHell 在评论中说的那样做:
$this->log->create(parameters);
- 您创建方法链接 ex:
$this->log->setData($parameters)->create();