Comments (8)
onBeforeSerialize
would be the right place for those kind of cases. If you have it defined on a DataExtension
, you should have something like that:
public function onBeforeSerialize()
{
$this->owner->FullName = $this->owner->fullname();
}
that will create a property FullName
on your dataobject that will be serialized with the rest as the DB fields like normal.
from silverstripe-restfulapi.
Awesome, thanks. I will give it a go tonight.
from silverstripe-restfulapi.
Hmm, I'm still struggling to get this to work.
class Student extends DataObject {
private static $db = array(
'firstname' => 'Varchar',
'lastname' => 'Varchar'
);
public static $allowed_actions = array(
'fullname'
);
public function onBeforeSerialize() {
// This works:
// Debug::show($this->owner-> fullname());
// This doesn't work:
$this->owner-> FullName = $this->owner-> fullname();
// unset($this->owner->firstname);
}
}
class StudentExtension extends DataExtension {
public function fullname() {
return $this->firstname . ' ' . $this->lastname;
}
}
_config.php
Edited:
Student::add_extension('StudentExtension');
I also tried to put the onBeforeSerialize method on the DataExtension.
Is there more configuration required in the config.yml file?
from silverstripe-restfulapi.
$this->owner
only work if you are in the DataExtension
.
Then your config should read: Student::add_extension('StudentExtension');
So with this, you should have:
class Student extends DataObject {
private static $db = array(
'firstname' => 'Varchar',
'lastname' => 'Varchar'
}
public static $allowed_actions = array(
'fullname'
);
public function fullname() {
return $this->firstname . ' ' . $this->lastname;
}
}
class StudentExtension extends DataExtension {
public function onBeforeSerialize() {
$this->owner->FullName = $this->owner-> fullname();
// unset($this->owner->firstname);
}
}
from silverstripe-restfulapi.
That's not working for me.
This is how my response looks like:
{"students":[{"id":1,"firstname":"John","lastname":"Doe"}]}
Sorry, I made a mistake in my previews comment. I actually had Student::add_extension('StudentExtension') in my config, as well as $this->owner
from silverstripe-restfulapi.
So sorry, that's my bad. This used to work in earlier releases but now the serializer uses the Config api, so updating properties on the DataObject wont work that simply. You would have to update the static $db:
class StudentExtension extends DataExtension {
public function onBeforeSerialize() {
$db = $this->owner->config()->get('db');
$db['fullName'] = '';
$this->owner->config()->update('db', $db);
$this->owner->setField('fullName', $this->owner->fullname());
}
}
Which I'll admit feels very awkward... and I can't really test this right now...
Best option might be the onAfterSerialize
which works something like:
public function onAfterSerialize(&$formattedDataObjectMap) {
$formattedDataObjectMap['fullName'] = $this->owner->fullname();
}
from silverstripe-restfulapi.
That works perfectly!
Thank you so much for your time.
from silverstripe-restfulapi.
Tracking doc updates here #27
from silverstripe-restfulapi.
Related Issues (20)
- Embedded Records not working as expected, or at all HOT 2
- Pagination for the Json
- The full configuration for BlogCategories & FeaturedImage
- Setting tokenOwnerClass HOT 2
- password with special characters HOT 1
- Response code 100 when post object has more than 3 relations
- CORS not working - Question really HOT 1
- api/auth/lostPassword -> BadMethodCallException
- New release? HOT 1
- Created, LastEdited never seem to be returned HOT 3
- Specify fields to be returned HOT 2
- default limit? HOT 1
- Access to token on dataobjects HOT 2
- Why convert properties and model names by "lcfirst"? HOT 1
- Lost password existing account disclosure HOT 4
- Can I call multiple dataobject in one api request and response in one json object?
- How to prevent POST requests specifying ID HOT 1
- SilverStripe 4 Support HOT 1
- model_permission_check instanceof Member not namespaced HOT 1
- Getting error: Call to undefined method SilverStripe\Config\Collections\CachedConfigCollection::set()
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from silverstripe-restfulapi.