Welcome Guest, Not a member yet? Register   Sign In
Model / Entities relation
#1

(This post was last modified: 02-20-2019, 02:48 AM by keulu.)

Hi guys,

on alpha5, I don't think that the entities object is correctly populated.

If my model return an entity or an object and fill the entity.
No fields are casted
No fileds are datamaped
dates aren't muted to TimeObject

Maybe i don't understand something.

2 cases :
I request my model with an object and fill my entity :
$_options in my entity is ignored.

response from my controller :
Code:
{
   "success": true,
   "message": "",
   "data": {
       "firstname": "Darth",
       "lastname": "Vader",
       "username": null,
       "email": "[email protected]",
       "created_at": "2019-02-08 12:27:42",
       "deleted": "0"
   }
}

If i add setter and getter like that in my entity

PHP Code:
public function setCreatedAt(string $dateString)
 
   {
 
       $this->created_at = new Time($dateString'UTC');

 
       return $this;
 
   }

 
   public function getCreatedAt(string $format 'Y-m-d H:i:s')
 
   {
 
       // Convert to CodeIgniter\I18n\Time object
 
       $this->created_at $this->mutateDate($this->created_at);

 
       $timezone $this->timezone ?? app_timezone();

 
       $this->created_at->setTimezone($timezone);

 
       return $this->created_at->format($format);
 
   

my controller return :

Code:
{
   "success": true,
   "message": "",
   "data": {
       "firstname": "Darth",
       "lastname": "Vader",
       "username": null,
       "email": "[email protected]",
       "created_at": {
           "date": "2019-02-08 12:27:42.000000",
           "timezone_type": 3,
           "timezone": "UTC"
       },
       "deleted": "0"
   }
}

OK : created_at is now muted to TimeObject


I request my model with entity in $returnType :

Only fileds are populated setter and getter are not interpreted and $_options is just ignored.

My files :

Models/UserModel.php
PHP Code:
<?php namespace App\Models;

use 
CodeIgniter\Model;

class 
UserModel extends Model
{

 
   /**
     * Model Configuration
     */
 
   protected $table      'users';
 
   protected $primaryKey 'id';
 
   protected $returnType '\App\Entities\User';
 
   protected $allowedFields = ['firstname''lastname''username''email''password'];

 
   protected $useSoftDeletes true;
 
   protected $dateFormat 'datetime';
 
   protected $useTimestamps true;

 
   protected $skipValidation     false;
 
   protected $validationRules    = [
 
       'firstname'    => 'required|min_length[3]',
 
       'lastname'     => 'required|min_length[3]',
 
       'username'     => 'required|alpha_numeric_space|min_length[3]',
 
       'email'        => 'required|valid_email|is_unique[users.email,id,{id}]',
 
       'password'     => 'required|min_length[8]',
 
       // 'password_confirm' => 'required_with[password]|matches[password]'
 
       // 'password_confirm' => 'matches[password]'
 
   ];

 
   protected $validationMessages = [
 
       'email'        => [
 
           'is_unique' => 'Sorry. That email has already been taken. Please choose another.'
 
       ]
 
   ];

 
   protected $afterDelete = ['updateDeletedAt'];


 
   /**
     * Protected & internals methods
     */

 
   protected function updateDeletedAt(array $data)
 
   {
 
       if (! isset($data['id']) ) return $data;

 
       $this->builder()
 
           ->whereIn('id'$data['id'])
 
           ->set(['deleted_at' => date('Y-m-d H:i:s')])
 
           ->update();

 
       return $data;
 
   }


Entities/User.php

PHP Code:
<?php namespace App\Entities;

use 
CodeIgniter\Entity;

class 
User extends Entity
{
 
   protected $id;
 
   public $firstname;
 
   public $lastname;
 
   public $username;
 
   public $email;
 
   protected $password;
 
   public $created_at;
 
   protected $updated_at;
 
   public $deleted;
 
   protected $deleted_at;

 
   protected $_options = [
 
       'datamap' => [
 
           'full_name' => 'username'
 
       ],
 
       'dates' => ['created_at''updated_at''deleted_at'],
 
       'casts' => [
 
           'deleted' => 'boolean'
 
       ],
 
   ];

 
   public function setPassword(string $pass)
 
   {
 
       $this->password password_hash($passPASSWORD_BCRYPT);
 
       return $this;
 
   }



Controller/Users.php
PHP Code:
<?php
namespace App\Controllers;

use 
CodeIgniter\Controller;
use 
CodeIgniter\API\ResponseTrait;

use 
Restserver\Libraries\Format;

use 
App\Models\UserModel;
use 
App\Entities\User;

class 
Users extends Controller
{

 
   /**
     * Entry point for users listing
     */
 
   public function index()
 
   {
 
       $userModel = new UserModel();
 
       $users $userModel->findAll();

 
       $data = [
 
           'success' => true,
 
           'message' => '',
 
           'data' => $users,
 
       ];

 
       return $this->response->setStatusCode(Format::HTTP_OK)->setJSON($data);
 
   }

 
   /**
     * Entry point for specific user
     */
 
   public function show($id)
 
   {
 
       $userModel = new UserModel();
 
       $user $userModel->find($id);
 
       // $user->myDate = $user->created_at->humanize();

 
       if ($user){
 
           $data = [
 
               'success' => true,
 
               'message' => '',
 
               'data' => $user,
 
           ];

 
           return $this->response->setStatusCode(Format::HTTP_OK)->setJSON($data);
 
       }else{
 
           $data = [
 
               'success' => false,
 
               'message' => 'user_not_found',
 
               'data' => []
 
           ];

 
           return $this->response->setStatusCode(Format::HTTP_NOT_FOUND)->setJSON($data);
 
       }

 
   }

 
   /**
     * Entry point for user creation
     */
 
   public function create()
 
   {
 
       $data $this->request->getPost();

 
       // var_dump($data);die;

 
       $userModel = new UserModel();
 
       $userEntity = new User();

 
       if ($userEntity->fill($data)){
 
           if ($userModel->save($userEntity) !== false){

 
               $data = [
 
                   'success' => true,
 
                   'message' => 'resources_created',
 
                   'data' => [],
 
               ];

 
               return $this->response->setStatusCode(Format::HTTP_CREATED)->setJSON($data);
 
           }else{
 
               $data = [
 
                   'success' => false,
 
                   'message' => 'resources_not_created',
 
                   'data' => $userModel->errors(),
 
               ];

 
               return $this->response->setStatusCode(Format::HTTP_NOT_ACCEPTABLE)->setJSON($data);
 
           }
 
       }else{
 
           $data = [
 
               'success' => false,
 
               'message' => 'resource_dont_match',
 
               'data' => [],
 
           ];

 
           return $this->response->setStatusCode(Format::HTTP_BAD_REQUEST)->setJSON($data);
 
       }

 
   }

 
   /**
     * Entry point for user update
     */
 
   public function update($id)
 
   {
 
       $data $this->request->getRawInput();

 
       $userModel = new UserModel();
 
       $userEntity = new User();

 
       if ($userEntity->fill($data)){

 
           if ($userModel->save($userEntity) !== false){
 
               $data = [
 
                   'success' => true,
 
                   'message' => 'resources_updated',
 
                   'data' => ['id' => $id],
 
               ];

 
               return $this->response->setStatusCode(Format::HTTP_OK)->setJSON($data);
 
           }else{
 
               $data = [
 
                   'success' => false,
 
                   'message' => 'resource_not_updated',
 
                   'data' => $userModel->errors(),
 
               ];

 
               return $this->response->setStatusCode(Format::HTTP_NOT_ACCEPTABLE)->setJSON($data);
 
           }
 
       }else{
 
           $data = [
 
               'success' => false,
 
               'message' => 'resource_dont_match',
 
               'data' => [],
 
           ];

 
           return $this->response->setStatusCode(Format::HTTP_BAD_REQUEST)->setJSON($data);
 
       }
 
   }

 
   /**
     * Entry point for user delete
     */
 
   public function delete($id)
 
   {
 
       $userModel = new UserModel();

 
       if ($userModel->delete($id) !== false){
 
           $data = [
 
               'success' => true,
 
               'message' => 'resources_deleted',
 
               'data' => ['id' => $id],
 
           ];

 
           return $this->response->setStatusCode(Format::HTTP_OK)->setJSON($data);
 
       }else{
 
           $data = [
 
               'success' => false,
 
               'message' => 'resource_not_deleted',
 
               'data' => [],
 
           ];

 
           return $this->response->setStatusCode(Format::HTTP_NOT_ACCEPTABLE)->setJSON($data);
 
       }
 
   }


 
   //--------------------------------------------------------------------
 
   // End of file Users.php
 
   //--------------------------------------------------------------------

Reply


Messages In This Thread
Model / Entities relation - by keulu - 02-20-2019, 02:45 AM
RE: Model / Entities relation - by puschie - 02-22-2019, 03:10 AM
RE: Model / Entities relation - by keulu - 02-22-2019, 07:09 AM
RE: Model / Entities relation - by puschie - 02-25-2019, 07:17 AM
RE: Model / Entities relation - by keulu - 02-26-2019, 11:31 AM
RE: Model / Entities relation - by keulu - 02-26-2019, 01:41 PM
RE: Model / Entities relation - by keulu - 02-27-2019, 11:52 AM



Theme © iAndrew 2016 - Forum software by © MyBB