I have been trying to create a folder concept in my application.
I tried to return the o/p in json format for APi.
I am trying to list the folder,sub folder and the files in sub folder,but when I tried to nested array like this
{
"success_msg": 1,
"message": "success",
"details": [
{
"foldername": "Test_folder_1",
"subfolder": [
{
"sub_folder_name": "Test_sub_folder_1",
"subfile": [
{
"filename": "test_1.pdf"
},
{
"filename": "test_2.pdf"
}
]
},
{
"sub_folder_name": "test_folder",
"subfile": [
{
"filename": "test_3.jpg"
}
]
}
]
}
]
}
I am getting wrong o/p.Let me share with you that
{
"success_msg": 1,
"message": "success",
"details": [
{
"foldername": "Test_folder_1",
"subfolder": [
{
"sub_folder_name": "Test_sub_folder_1"
},
{
"sub_folder_name": "test_folder"
}
],
"subfile": [
{
"filename": "test_1.pdf"
},
{
"filename": "test_2.pdf"
},
{
"filename": "test_3.jpg"
}
]
},
{
"foldername": "sample_folder",
"subfolder": [],
"subfile": []
}
]
}
And this is my action
public function actionFiles() {
ob_start();
$raw = file_get_contents("php://input");
$obj = json_decode($raw);
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
if ($obj!=null){
$user_id = $obj->cur_user_id;
$user_model = User::find()->where(['id'=>$user_id])->one();
$developer_id = $user_model->createdby;
$folder_model = Folder::find()->where(['developerid'=>$developer_id,'foldertype'=>'parent'])->all();
$count_folder = count($folder_model);
if($count_folder > '0'){
$response = ['success_msg' => 1, 'message' => 'success', 'details' => []];
foreach($folder_model as $folder) {
$folder_id = $folder['id'];
$userdet['foldername'] = $folder['foldername'];
$sub = [];
$sub_files = [];
$subfolder_model = Folder::find()->where(['folderid'=>$folder_id])->all();
foreach ($subfolder_model as $subfolder) {
$sub_folder_id = $subfolder['id'];
$sub_name['sub_folder_name'] = $subfolder['foldername'];
$sub_file = Files::find()->where(['folderid'=>$folder_id,'subfolderid'=>$sub_folder_id])->all();
foreach ($sub_file as $file) {
$filename['filename'] = $file['filename'];
array_push($sub_files, $filename);
}
array_push($sub, $sub_name);
// echo '<pre>';print_r($userdet);
}
$userdet['subfolder'] = $sub;
$userdet['subfile'] = $sub_files;
array_push($response['details'], $userdet);
}
echo json_encode($response);
}else {
// failed to insert row
$response["success_msg"] = 2;
$response["message"] = "No News found";
echo json_encode($response);
}
} else {
$response["success_msg"] = 3;
$response["message"] = "Data missing";
echo json_encode($response);
}
}
Can anyone tell me how can I insert sub file array in sub folder array...
thanks in advance..
I updated the code with some changes in position of the arrays.
if ($count_folder > '0') {
$response = ['success_msg' => 1, 'message' => 'success', 'details' => []];
foreach ($folder_model as $folder) {
$folder_id = $folder['id'];
$userdet['foldername'] = $folder['foldername'];
$sub = [];
$subfolder_model = Folder::find()->where(['folderid' => $folder_id])->all();
foreach ($subfolder_model as $subfolder) {
$sub_files = [];
$sub_folder_id = $subfolder['id'];
$sub_name['sub_folder_name'] = $subfolder['foldername'];
$sub_file = Files::find()->where(['folderid' => $folder_id, 'subfolderid' => $sub_folder_id])->all();
echo '<pre>';print_r($sub_file);
foreach ($sub_file as $file) {
$filename['filename'] = Yii::$app->urlManager->createAbsoluteUrl('uploads/' . $file['filename']);
array_push($sub_files, $filename);
}
$sub_name['subfile'] = $sub_files;
array_push($sub, $sub_name);
}
$userdet['subfolder'] = $sub;
array_push($response['details'], $userdet);
}
echo json_encode($response);