Edit a has_one relationship using the gridfield editor, triggered by clicking a button.
PHP
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
code
.editorconfig
.scrutinizer.yml
README.md
_config.php
composer.json

README.md

SilverStripe has_one field

Allows you to create a CMS button for creating and editing a single related object. It is actually a grid field, but just looks like a button.

demo

Usage

In Warehouse.php context:

    public function getCMSFields() {
        $fields = parent::getCMSFields();
        if($this->Address()->exists()){
            $fields->addFieldsToTab("Root.Main", array(
                ReadonlyField::create("add", "Address", $this->Address()->toString())
            ));
        }
        $fields->removeByName("AddressID");
        $fields->addFieldToTab("Root.Main",
            HasOneButtonField::create("Address", "Address", $this) //here!
        );

        return $fields;
    }

You must pass through the parent context ($this), so that the has_one relationship can be set by the GridFieldDetailForm.

Caveats

The field name must match the has_one relationship name.