Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clarification about behaviour #13

Open
lhasselb opened this issue Nov 9, 2018 · 2 comments
Open

Clarification about behaviour #13

lhasselb opened this issue Nov 9, 2018 · 2 comments

Comments

@lhasselb
Copy link

lhasselb commented Nov 9, 2018

Hi there,

I just started using hasoneedit and I faced something which might be a feature or an issue.
Therefore the mysterious title ;-)

I followed your instructions to setup the related object fields on a separate tab within the back-end
and as long as I fill the fields with values everything works like a charm:
The related object gets created the relation is there and the fields are filled.
Perfect!

But as far as I don't fill anything to the fields the object still is created and even worse
every time I update the one using the related object with hasoneedit another one gets added.

I found ways to work around the problem with empty fields (by adding some defaults or onBeforeWrite) and one could add some validation to catch empty fields also.
But right now I have the impression that the feature of creating the related object no matter what
may also a be an issue in some cases ?

Cheers
Lars

@stevie-mayhew
Copy link
Owner

Hey @lhasselb - the creation of the objects even if they are empty is intended. I'm not sure about the updated fields creating a new object - can you provide an example where this happens?

@lhasselb
Copy link
Author

lhasselb commented Nov 13, 2018

Lets assume you have a (DataObject) Course with a Title, Content, Image and a Category. Beside that you have another (DataObject) called News. The Course object has a has_one relation and the fields for the News are displayed on a second tab called News within the Course using
$fields->addFieldsToTab('Root.News', HasOneEdit::getInlineFields($this, 'News'))

So far so good fields are displayed and as mentioned as long as you navigate to the mentioned tab and add some data (start simple just use a title field for the News object).

But if you don't validate the News object for an empty title or add a default the following happens:
a) an empty News object gets created (as you mentioned by intention)
b) whenever you update the Course object another empty News gets created

I can understand a)
but I am not sure for b)

I assume because the lines within the DataObjectExtension
foreach ($toWrite as $relationName => $obj) {
$obj->write();
$this->owner->setField("{$relationName}ID", $obj->ID);
}
will only add the required ID for objects with a valid change ($toWrite > 0) - not for empty fields - right?

Hope that helps to clarify.

obj63mc added a commit to obj63mc/hasoneedit that referenced this issue Jun 28, 2023
With SS5 and the new MAILER_DSN environment variable, when set we are receiving the following error - 

        Fatal error: Uncaught MJS\TopSort\CircularDependencyException: Circular dependency found: modelascontrollercatchallroute->hasoneedit->mailer-dsn-env->hasoneedit in /Users/joemadden/Sites/rumchata/vendor/marcj/topsort/src/CircularDependencyException.php:34 Stack trace: #0 /Users/joemadden/Sites/rumchata/vendor/marcj/topsort/src/Implementations/BaseImplementation.php(57): MJS\TopSort\CircularDependencyException::create(Array) #1 /Users/joemadden/Sites/rumchata/vendor/marcj/topsort/src/Implementations/ArraySort.php(63): MJS\TopSort\Implementations\BaseImplementation->throwCircularExceptionIfNeeded(Object(stdClass), Array) stevie-mayhew#2 /Users/joemadden/Sites/rumchata/vendor/marcj/topsort/src/Implementations/ArraySort.php(75): MJS\TopSort\Implementations\ArraySort->visit(Object(stdClass), Array) stevie-mayhew#3 /Users/joemadden/Sites/rumchata/vendor/marcj/topsort/src/Implementations/ArraySort.php(75): MJS\TopSort\Implementations\ArraySort->visit(Object(stdClass), Array) stevie-mayhew#4 /Users/joemadden/Sites/rumchata/vendor/marcj/topsort/src/Implementations/ArraySort.php(75): MJS\TopSort\Implementations\ArraySort->visit(Object(stdClass), Array) stevie-mayhew#5 /Users/joemadden/Sites/rumchata/vendor/marcj/topsort/src/Implementations/ArraySort.php(115): MJS\TopSort\Implementations\ArraySort->visit(Object(stdClass), Array) stevie-mayhew#6 /Users/joemadden/Sites/rumchata/vendor/marcj/topsort/src/Implementations/ArraySort.php(98): MJS\TopSort\Implementations\ArraySort->doSort() stevie-mayhew#7 /Users/joemadden/Sites/rumchata/vendor/silverstripe/config/src/Transformer/YamlTransformer.php(517): MJS\TopSort\Implementations\ArraySort->sort() stevie-mayhew#8 /Users/joemadden/Sites/rumchata/vendor/silverstripe/config/src/Transformer/YamlTransformer.php(104): SilverStripe\Config\Transformer\YamlTransformer->getSortedYamlDocuments() stevie-mayhew#9 /Users/joemadden/Sites/rumchata/vendor/silverstripe/config/src/Collections/MemoryConfigCollection.php(73): SilverStripe\Config\Transformer\YamlTransformer->transform(Object(SilverStripe\Config\Collections\MemoryConfigCollection)) stevie-mayhew#10 /Users/joemadden/Sites/rumchata/vendor/silverstripe/framework/src/Core/Config/CoreConfigFactory.php(89): SilverStripe\Config\Collections\MemoryConfigCollection->transform(Array) stevie-mayhew#11 /Users/joemadden/Sites/rumchata/vendor/silverstripe/framework/src/Core/Config/CoreConfigFactory.php(67): SilverStripe\Core\Config\CoreConfigFactory->createCore() stevie-mayhew#12 [internal function]: SilverStripe\Core\Config\CoreConfigFactory->SilverStripe\Core\Config\{closure}() stevie-mayhew#13 /Users/joemadden/Sites/rumchata/vendor/silverstripe/config/src/Collections/CachedConfigCollection.php(139): call_user_func(Object(Closure)) stevie-mayhew#14 /Users/joemadden/Sites/rumchata/vendor/silverstripe/config/src/Collections/CachedConfigCollection.php(88): SilverStripe\Config\Collections\CachedConfigCollection->getCollection() stevie-mayhew#15 /Users/joemadden/Sites/rumchata/vendor/silverstripe/framework/src/Core/Config/Config_ForClass.php(81): SilverStripe\Config\Collections\CachedConfigCollection->get('SilverStripe\\Co...', 'module_priority', 1) stevie-mayhew#16 /Users/joemadden/Sites/rumchata/vendor/silverstripe/framework/src/Core/Config/Config_ForClass.php(114): SilverStripe\Core\Config\Config_ForClass->get('module_priority', 1) stevie-mayhew#17 /Users/joemadden/Sites/rumchata/vendor/silverstripe/framework/src/Core/Manifest/ModuleManifest.php(232): SilverStripe\Core\Config\Config_ForClass->uninherited('module_priority') stevie-mayhew#18 /Users/joemadden/Sites/rumchata/vendor/silverstripe/framework/src/Core/BaseKernel.php(200): SilverStripe\Core\Manifest\ModuleManifest->sort() stevie-mayhew#19 /Users/joemadden/Sites/rumchata/vendor/silverstripe/framework/src/Core/CoreKernel.php(32): SilverStripe\Core\BaseKernel->bootManifests(true) stevie-mayhew#20 /Users/joemadden/Sites/rumchata/vendor/silverstripe/framework/src/Control/HTTPApplication.php(132): SilverStripe\Core\CoreKernel->boot(true) stevie-mayhew#21 /Users/joemadden/Sites/rumchata/vendor/silverstripe/framework/src/Control/Middleware/HTTPMiddlewareAware.php(65): SilverStripe\Control\HTTPApplication->SilverStripe\Control\{closure}(Object(SilverStripe\Control\HTTPRequest)) stevie-mayhew#22 /Users/joemadden/Sites/rumchata/vendor/silverstripe/framework/src/Control/HTTPApplication.php(130): SilverStripe\Control\HTTPApplication->callMiddleware(Object(SilverStripe\Control\HTTPRequest), Object(Closure)) stevie-mayhew#23 /Users/joemadden/Sites/rumchata/vendor/silverstripe/framework/src/Control/HTTPApplication.php(113): SilverStripe\Control\HTTPApplication->execute(Object(SilverStripe\Control\HTTPRequest), Object(Closure), true) stevie-mayhew#24 /Users/joemadden/Sites/rumchata/public/index.php(25): SilverStripe\Control\HTTPApplication->handle(Object(SilverStripe\Control\HTTPRequest)) stevie-mayhew#25 {main} thrown in /Users/joemadden/Sites/rumchata/vendor/marcj/topsort/src/CircularDependencyException.php on line 34

When we remove the After clause this then runs as expected.
obj63mc added a commit to obj63mc/hasoneedit that referenced this issue Jun 28, 2023
Currently when set to After: framework/* we are getting an error whenever the MAILER_DSN environment variable is set.

Updating this to just After: framework seems to resolve the issue.

Error we were getting was the following - 
		Fatal error: Uncaught MJS\TopSort\CircularDependencyException: Circular dependency found: modelascontrollercatchallroute->hasoneedit->mailer-dsn-env->hasoneedit in /vendor/marcj/topsort/src/CircularDependencyException.php:34 Stack trace: 
		#0 /vendor/marcj/topsort/src/Implementations/BaseImplementation.php(57): MJS\TopSort\CircularDependencyException::create(Array) 
		#1 /vendor/marcj/topsort/src/Implementations/ArraySort.php(63): MJS\TopSort\Implementations\BaseImplementation->throwCircularExceptionIfNeeded(Object(stdClass), Array) 
		stevie-mayhew#2 /vendor/marcj/topsort/src/Implementations/ArraySort.php(75): MJS\TopSort\Implementations\ArraySort->visit(Object(stdClass), Array) 
		stevie-mayhew#3 /vendor/marcj/topsort/src/Implementations/ArraySort.php(75): MJS\TopSort\Implementations\ArraySort->visit(Object(stdClass), Array) 
		stevie-mayhew#4 /vendor/marcj/topsort/src/Implementations/ArraySort.php(75): MJS\TopSort\Implementations\ArraySort->visit(Object(stdClass), Array) 
		stevie-mayhew#5 /vendor/marcj/topsort/src/Implementations/ArraySort.php(115): MJS\TopSort\Implementations\ArraySort->visit(Object(stdClass), Array) 
		stevie-mayhew#6 /vendor/marcj/topsort/src/Implementations/ArraySort.php(98): MJS\TopSort\Implementations\ArraySort->doSort() 
		stevie-mayhew#7 /vendor/silverstripe/config/src/Transformer/YamlTransformer.php(517): MJS\TopSort\Implementations\ArraySort->sort() 
		stevie-mayhew#8 /vendor/silverstripe/config/src/Transformer/YamlTransformer.php(104): SilverStripe\Config\Transformer\YamlTransformer->getSortedYamlDocuments() 
		stevie-mayhew#9 /vendor/silverstripe/config/src/Collections/MemoryConfigCollection.php(73): SilverStripe\Config\Transformer\YamlTransformer->transform(Object(SilverStripe\Config\Collections\MemoryConfigCollection)) 
		stevie-mayhew#10 /vendor/silverstripe/framework/src/Core/Config/CoreConfigFactory.php(89): SilverStripe\Config\Collections\MemoryConfigCollection->transform(Array) 
		stevie-mayhew#11 /vendor/silverstripe/framework/src/Core/Config/CoreConfigFactory.php(67): SilverStripe\Core\Config\CoreConfigFactory->createCore() 
		stevie-mayhew#12 [internal function]: SilverStripe\Core\Config\CoreConfigFactory->SilverStripe\Core\Config\{closure}() 
		stevie-mayhew#13 /vendor/silverstripe/config/src/Collections/CachedConfigCollection.php(139): call_user_func(Object(Closure)) 
		stevie-mayhew#14 /vendor/silverstripe/config/src/Collections/CachedConfigCollection.php(88): SilverStripe\Config\Collections\CachedConfigCollection->getCollection() 
		stevie-mayhew#15 /vendor/silverstripe/framework/src/Core/Config/Config_ForClass.php(81): SilverStripe\Config\Collections\CachedConfigCollection->get('SilverStripe\\Co...', 'module_priority', 1) 
		stevie-mayhew#16 /vendor/silverstripe/framework/src/Core/Config/Config_ForClass.php(114): SilverStripe\Core\Config\Config_ForClass->get('module_priority', 1) 
		stevie-mayhew#17 /vendor/silverstripe/framework/src/Core/Manifest/ModuleManifest.php(232): SilverStripe\Core\Config\Config_ForClass->uninherited('module_priority') 
		stevie-mayhew#18 /vendor/silverstripe/framework/src/Core/BaseKernel.php(200): SilverStripe\Core\Manifest\ModuleManifest->sort() 
		stevie-mayhew#19 /vendor/silverstripe/framework/src/Core/CoreKernel.php(32): SilverStripe\Core\BaseKernel->bootManifests(true) 
		stevie-mayhew#20 /vendor/silverstripe/framework/src/Control/HTTPApplication.php(132): SilverStripe\Core\CoreKernel->boot(true) 
		stevie-mayhew#21 /vendor/silverstripe/framework/src/Control/Middleware/HTTPMiddlewareAware.php(65): SilverStripe\Control\HTTPApplication->SilverStripe\Control\{closure}(Object(SilverStripe\Control\HTTPRequest)) 
		stevie-mayhew#22 /vendor/silverstripe/framework/src/Control/HTTPApplication.php(130): SilverStripe\Control\HTTPApplication->callMiddleware(Object(SilverStripe\Control\HTTPRequest), Object(Closure)) 
		stevie-mayhew#23 /vendor/silverstripe/framework/src/Control/HTTPApplication.php(113): SilverStripe\Control\HTTPApplication->execute(Object(SilverStripe\Control\HTTPRequest), Object(Closure), true) 
		stevie-mayhew#24 /public/index.php(25): SilverStripe\Control\HTTPApplication->handle(Object(SilverStripe\Control\HTTPRequest)) 
		stevie-mayhew#25 {main} thrown in /vendor/marcj/topsort/src/CircularDependencyException.php on line 34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants