У моего приложения lumen есть общая черта, которая записывает каждое действие добавления / обновления / удаления каждой таблицы в базе данных.Эта черта используется в базовой модели, которая затем расширяется для всех применимых файлов моделей таблиц, как показано ниже.
namespace App\Models;
class BaseModel extends Model {
use RecordsActivity; //this is the common trait
}
namespace App\Models;
class User extends BaseModel {}
До даты у моего приложения были только API, которые будут использоваться клиентом Angular.Итак, каждая конечная точка API поставляется с запросом, в котором я буду хранить свойство в промежуточном программном обеспечении как end_point_id (динамический для каждого вызова API).Этот end_point_id будет сохранен как часть записи транзакции добавления / обновления / удаления, чтобы связать транзакции с транзакцией конечной точки, как показано ниже.
namespace App\Http\Middleware;
class APIMiddleware {
//check and do some process
$request->merge(['end_point_id' => $end_point_id]);
}
namespace App\Http\Traits;
trait RecordsActivity {
//other preparation statements
AuditTrail::create([
"end_point_id" => app('request')->end_point_id,
'table_name' => $model->getTable(),
'object_id' => $model->id,
'field_name' => $field_name,
'old_value' => $old_value,
'new_value' => $new_value,
'event_timestamp' => $model->updated_at]);
}
При ссылке на app ('request') признак получал значениеend_point_id при использовании в качестве API.Сейчас я пишу задание для выполнения некоторого пакетного процесса на нескольких таблицах, обычно используемых API.Теперь я переименовал end_point_id в «event_id» и добавил новый столбец «event_trigger» для хранения «API / JOB».Когда задание будет выполнено, таблица добавления / обновления / удаления транзакций будет сохранена в таблице audit_trails с event_trigger как «JOB» и event_id как целое число job_id.
Поскольку у задания нет входного запроса, я попытался создать объект Illuminate \ Http \ Request и включил свойство с именем 'event_id', используя $ request-> replace (также пробовал метод слияния).При этом вновь включенное свойство становится недоступным при попытке его использовать как app ('request') -> event_id.Ниже приведена информация о печатном журнале.
TestJob.php
namespace App\Console\Commands;
class TestJob extends Command {
public function handle() {
$request = new \Illuminate\Http\Request;
$request->replace(['event_id' => 11]);
Log::info(print_r($request->all(), true));
//prints output as Array
//(
// [event_id] => 11
//)
Log::info(print_r(app('request')->all(),true));
//prints output as Array
//(
//)
}
}
Поскольку app('request')->all()
печатает пустой массив, при любом обновлении таблицы признак завершается ошибкой, так как значение event_id отсутствует.
Я попытался создать $request = new \Request()
, он не удался, так как
"вызов неопределенного метода replace ()";
то же самое для merge()
тоже,Та же ошибка при попытке создать запрос Guzzle.
Поскольку lumen не имеет состояния, передача значения от одного компонента другому через объект запроса была единственной возможностью, которая пришла мне в голову.Любая помощь в решении проблемы приветствуется.Я хотел бы знать, как создать объект запроса из задания, которое будет доступно с помощью команды app ('request') из другого файла.
Спасибо!