1.public function destroy($id)
Используйте
model binding - удобно же.
2. ProjectPolicy::requestDelete($id)
есть прекрасный вариант расставлять policy на уровне роутера - can:
Route::delete('/project/{project}', [Controller::class, 'method'])->can('delete', 'project');
3. $project = Project::find($id);
FindOrFail - в случае отсутствия модели выбросит ровно 404;
4. $this->deleteImageProject($project->logo);
Если вы всегда удаляете лого после удаления модели - то
повесьте событие delete и всегда удаляйте лого как только где то и в каком то месте пытаются удалить модель Project. Для случаев mass delete - гляньте в трейт softDeletes, по аналогии можно навешать обработчик.
Лень - через события? Ну переопределите у модели метод delete.
public function delete()
{
$result = parent::delete();
if($result){
$this->deleteImageProject($this->logo);
}
return $result;
}
У вас логика удаления модели (если нам надо удалить модель - надо удалить лого) - не должна валяться по всему проекту - она должна лежать в одном месте. А судя повсему вы ее вообще в контроллер запихали - ни в какие ворота
При использовании всего этого у вас метод контроллера приобретет простой и лаконичный вид.
public function destroy(Project $project)
{
$project->delete();
return response('', 204);
}
204 - ибо можем
If a DELETE method is successfully applied, the origin server SHOULD
send a 202 (Accepted) status code if the action will likely succeed
but has not yet been enacted, a 204 (No Content) status code if the
action has been enacted and no further information is to be supplied,
or a 200 (OK) status code if the action has been enacted and the
response message includes a representation describing the status.
RFC