- Первое, что вы можете сделать, это использовать деструктурирующее назначение , чтобы получить ответные данные из вашего запроса Ax ios:
axios.get(this.apiUrl + '/adminarea/tasks/' + this.task_id, this.credentialsConfig)
.then(({ data }) => {
this.taskRow = data.data[0][0]
Так что теперь response.data.data[0][0]
сокращено до data.data[0][0]
.
Второе, что вы можете сделать, в функции
toArray
вашего
TaskCollection
класса - вернуть преобразованную коллекцию напрямую, а не заключать ее в массив:
public function toArray($task)
{
return $this->collection->transform(function($task){
return [
'id' => $task->i
...
];
});
}
Теперь вам не нужно использовать [0]
везде. Таким образом, вместо data.data[0][0]
вы можете получить доступ к одной задаче с помощью data.data[0]
.
Чтобы избежать необходимости использовать
[0]
для единичных ответов, вы должны вернуть
JsonResource
вместо
ResourceCollection
. Для этого вам нужно переместить свой код из
$this->collection->transform
в новый класс
JsonResource
. Например:
app/Http/Resources/TaskResource.php
:
<?php
namespace App\Http\Resources;
use App\Facades\MyFuncsClass;
use Illuminate\Http\Resources\Json\JsonResource;
class TaskResource extends JsonResource
{
public function toArray($task)
{
return [
'id' => $this->id,
'name' => $this->name,
'slug' => $this->slug,
...
];
}
public function with($task)
{
return [
'meta' => [
'version'=>MyFuncsClass::getAppVersion()
]
];
}
}
Тогда вы можете вернуть один ресурс с
return new TaskResource($task);
В Javascript вы сможете чтобы получить единственное задание с data.data
сейчас:
axios.get(this.apiUrl + '/adminarea/tasks/' + this.task_id, this.credentialsConfig)
.then(({ data }) => {
this.taskRow = data.data;
Вы можете изменить свой класс TaskCollection
, чтобы неявно использовать новый класс TaskResource
для каждой задачи:
<?php
namespace App\Http\Resources;
use App\Facades\MyFuncsClass;
use Illuminate\Http\Resources\Json\ResourceCollection;
class TaskCollection extends ResourceCollection
{
public function toArray($request)
{
return parent::toArray($request);
}
public function with($task)
{
return [
'meta' => [
'version'=>MyFuncsClass::getAppVersion()
]
];
}
}
Как я пытался объяснить в комментариях, вы не сможете избежать необходимости заключать свои результаты в ключ (например,
'data'
) при возврате ненулевых значений из функции
with
. Если вы мне не верите, временно удалите функцию
with
, и вы увидите, что сможете получить доступ к своим задачам просто с помощью
data
(если вы отключили перенос с помощью
Resource::withoutWrapping();
).
Однако, одну вещь, которую вы можете сделать, это настроить клавишу «wrap». Например, для набора задач может потребоваться, чтобы оно было tasks
, а для одной задачи - task
. Вы можете просто добавить свойство $wrap
к своим TaskCollection
и TaskResource
классам:
class TaskCollection extends ResourceCollection
{
public static $wrap = 'tasks';
...
class TaskResource extends JsonResource
{
public static $wrap = 'task';
Теперь вы сможете получить доступ к списку задач из Javascript с помощью data.tasks
и единственное задание с data.task
:
axios.post(this.apiUrl + '/adminarea/tasks-filter', filters, this.credentialsConfig)
.then(({ data }) => {
this.tasks = data.tasks;
axios.get(this.apiUrl + '/adminarea/tasks/' + this.task_id, this.credentialsConfig)
.then(({ data }) => {
this.taskRow = data.task;