find(Propietario::class)->array(); $base_url = str_replace('/propietarios', '{URL}', $request->getUri()); array_walk($propietarios, function (&$item) use ($base_url) { $link = [ 'rel' => 'propietario', 'title' => implode(' ', [$item['nombres'], $item['apellido_paterno'], $item['apellido_materno']]), 'href' => str_replace('{URL}', "/propietario/{$item['rut']}", $base_url) ]; $item['link'] = $link; }); return $this->withJson($response, compact('propietarios')); } protected function get(Factory $factory, string $class, $rut) { return $factory->find($class)->where([['rut', $rut]])->one(); } public function show(Request $request, Response $response, Factory $factory, $propietario_rut): Response { $propietario = $this->get($factory, Propietario::class, $propietario_rut); $output = [ 'input' => $propietario_rut, 'propietario' => $propietario->toArray(), 'link' => [ 'rel' => 'propietarios', 'title' => 'Propietarios', 'href' => str_replace("/propietario/{$propietario_rut}", '/propietarios', $request->getUri()) ] ]; $output['links'] = [ [ 'rel' => 'direccion', 'title' => $propietario->direccion()->calle, 'href' => str_replace("/propietario/{$propietario_rut}", "/direccion/{$propietario->direccion}", $request->getUri()) ] ]; return $this->withJson($response, $output); } public function add(Request $request, Response $response, Factory $factory): Response { $post = $request->getParsedBody(); $output = [ 'input' => $post ]; if (in_array('propietarios', $post)) { $output['propietarios'] = []; foreach ($post['propietarios'] as $input) { $propietario = Propietario::add($factory, $input); $propietario []= [ 'propietario' => $propietario->toArray(), 'created' => $propietario->is_new() ? $propietario->save() : false ]; } } elseif (in_array('propietario', $post)) { $propietario = Propietario::add($factory, $post); $output['propietario'] = $propietario; $output['created'] = $propietario->is_new() ? $propietario->save() : false; } return $this->withJson($response, $output); } public function edit(Request $request, Response $response, Factory $factory, $propietario_rut): Response { $post = $request->getParsedBody(); $input = compact('propietario_rut', 'post'); $propietario = $this->get($factory, Propietario::class, $propietario_rut); $output = [ 'input' => $input, 'propietario' => $propietario->toArray() ]; $output['edited'] = $propietario->edit($post); $output['changes'] = $propietario->toArray(); return $this->withJson($response, $output); } public function delete(Request $request, Response $response, Factory $factory, $propietario_rut): Response { $propietario = $this->get($factory, Propietario::class, $propietario_rut); $output = [ 'input' => $propietario_rut, 'propietario' => $propietario->toArray() ]; $output['deleted'] = $propietario->delete(); return $this->withJson($response, $output); } }