#laravel
#laravel
Вопрос:
В текущем приложении Laravel я управляю проектами, в которых есть папка для файла.
В проекте store созданный наблюдатель вызывается для создания папки. До сих пор это работает хорошо.
При обновлении проекта мне нравится обновлять имя папки, чтобы оно имело folder_name = project_name .
Но если я использую обоих наблюдателей, обновленный наблюдатель вызывается перед созданным наблюдателем. Чтобы показать это, я реализовал echo
функцию.
Контроллер:
public function store(StoreProjectRequest $request)
{
$project = $request->user()->projectsAsCreator()->create($request->all());
$projectPermission = new ProjectPermissionController();
$projectPermission->createPermissions('view', $project->id, [$request->user()->id]);
$projectPermission->createPermissions('edit', $project->id, [$request->user()->id]);
$projectPermission->createPermissions('admin', $project->id, [$request->user()->id]);
event(new ProjectCreated($project));
return response()->json(new ProjectCollectionResource($project));
}
Методы модели
protected static function booted()
{
static::created(function ($project) {
self::setProjectNumber($project);
self::createProjectFolder($project);
self::updateProject($project);
echo '1';
});
static::updated(function ($project) {
echo '2';
self::updateFolder($project);
});
}
public static function updateProject($project)
{
$project->update([
'due_date_status' => self::getDueDateStatus($project),
'due_date_status_label' => self::getDueDateStatusLabel($project),
'issue_labels' => self::getIssueLabels($project->issues)
]);
}
Ответ
2{
"message": "Trying to get property 'objectable' of non-object",
"exception": "ErrorException",
"file": "/gopanel/sites/7industry_net/public/7app/app/Models/Project/ProjectMethod.php",
"line": 141,
"trace": [
{
"file": "/gopanel/sites/7industry_net/public/7app/app/Models/Project/ProjectMethod.php",
"line": 141,
"function": "handleError",
"class": "Illuminate\Foundation\Bootstrap\HandleExceptions",
"type": "->"
},
Как мы можем видеть, в ответе есть только число 2.
Почему первым не является номер один? Это означает, почему созданный наблюдатель не запускается перед обновленным наблюдателем?
Комментарии:
1. 1-й сработает, когда экземпляр модели создаст некоторые данные, а 2-й отправит во время обновления, поэтому одновременно вы не можете получить оба ответа
echo
2. эхо-ответ предназначен только для того, чтобы увидеть, какой из них запускается первым. к сожалению, 2. срабатывает первым. Если я прокомментирую
self::updateFolder($project);
, ответ будет 2213. что вы делаете в
updateProject($project)
?4. @lagbox: я добавил его
5. что вызывает событие обновления? итак, вы видите 2 для обновления, потому что вы вызываете события обновления, прежде чем повторить 1 в созданном прослушивателе… может быть