Forum system implementation
$begingroup$
I have a function which does the following:
- When new Post Entity is added some fields in Category table are updated.
- When new Thread Entity is added the same fields in Category table are updated.
Because of this, some lines are completely the same.
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getObject();
$entityManager = $args->getObjectManager();
if ($entity instanceof Post) {
$post = $entity;
$thread = $post->getThread();
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($post->getBody());
$category->setLastPosterUsername($post->getUser()->getUsername());
$category->setLastPostCreatedAt($post->getCreatedAt());
$category->setIsLastPostOp(false);
$category->setPosts($category->getPosts() + 1);
$entityManager->merge($category);
$entityManager->flush();
}
if ($entity instanceof Thread) {
$thread = $entity;
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($thread->getBody());
$category->setLastPosterUsername($thread->getUser()->getUsername());
$category->setLastPostCreatedAt($thread->getCreatedAt());
$category->setIsLastPostOp(true);
$entityManager->merge($category);
$entityManager->flush();
}
}
How would be possible to refactor this code to avoid WET?
php doctrine
New contributor
$endgroup$
add a comment |
$begingroup$
I have a function which does the following:
- When new Post Entity is added some fields in Category table are updated.
- When new Thread Entity is added the same fields in Category table are updated.
Because of this, some lines are completely the same.
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getObject();
$entityManager = $args->getObjectManager();
if ($entity instanceof Post) {
$post = $entity;
$thread = $post->getThread();
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($post->getBody());
$category->setLastPosterUsername($post->getUser()->getUsername());
$category->setLastPostCreatedAt($post->getCreatedAt());
$category->setIsLastPostOp(false);
$category->setPosts($category->getPosts() + 1);
$entityManager->merge($category);
$entityManager->flush();
}
if ($entity instanceof Thread) {
$thread = $entity;
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($thread->getBody());
$category->setLastPosterUsername($thread->getUser()->getUsername());
$category->setLastPostCreatedAt($thread->getCreatedAt());
$category->setIsLastPostOp(true);
$entityManager->merge($category);
$entityManager->flush();
}
}
How would be possible to refactor this code to avoid WET?
php doctrine
New contributor
$endgroup$
$begingroup$
Errr.... Move the common code above if?
$endgroup$
– Your Common Sense
14 hours ago
add a comment |
$begingroup$
I have a function which does the following:
- When new Post Entity is added some fields in Category table are updated.
- When new Thread Entity is added the same fields in Category table are updated.
Because of this, some lines are completely the same.
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getObject();
$entityManager = $args->getObjectManager();
if ($entity instanceof Post) {
$post = $entity;
$thread = $post->getThread();
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($post->getBody());
$category->setLastPosterUsername($post->getUser()->getUsername());
$category->setLastPostCreatedAt($post->getCreatedAt());
$category->setIsLastPostOp(false);
$category->setPosts($category->getPosts() + 1);
$entityManager->merge($category);
$entityManager->flush();
}
if ($entity instanceof Thread) {
$thread = $entity;
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($thread->getBody());
$category->setLastPosterUsername($thread->getUser()->getUsername());
$category->setLastPostCreatedAt($thread->getCreatedAt());
$category->setIsLastPostOp(true);
$entityManager->merge($category);
$entityManager->flush();
}
}
How would be possible to refactor this code to avoid WET?
php doctrine
New contributor
$endgroup$
I have a function which does the following:
- When new Post Entity is added some fields in Category table are updated.
- When new Thread Entity is added the same fields in Category table are updated.
Because of this, some lines are completely the same.
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getObject();
$entityManager = $args->getObjectManager();
if ($entity instanceof Post) {
$post = $entity;
$thread = $post->getThread();
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($post->getBody());
$category->setLastPosterUsername($post->getUser()->getUsername());
$category->setLastPostCreatedAt($post->getCreatedAt());
$category->setIsLastPostOp(false);
$category->setPosts($category->getPosts() + 1);
$entityManager->merge($category);
$entityManager->flush();
}
if ($entity instanceof Thread) {
$thread = $entity;
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($thread->getBody());
$category->setLastPosterUsername($thread->getUser()->getUsername());
$category->setLastPostCreatedAt($thread->getCreatedAt());
$category->setIsLastPostOp(true);
$entityManager->merge($category);
$entityManager->flush();
}
}
How would be possible to refactor this code to avoid WET?
php doctrine
php doctrine
New contributor
New contributor
edited 24 mins ago
Jamal♦
30.3k11116226
30.3k11116226
New contributor
asked 15 hours ago
user10322178user10322178
132
132
New contributor
New contributor
$begingroup$
Errr.... Move the common code above if?
$endgroup$
– Your Common Sense
14 hours ago
add a comment |
$begingroup$
Errr.... Move the common code above if?
$endgroup$
– Your Common Sense
14 hours ago
$begingroup$
Errr.... Move the common code above if?
$endgroup$
– Your Common Sense
14 hours ago
$begingroup$
Errr.... Move the common code above if?
$endgroup$
– Your Common Sense
14 hours ago
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
How about something like this there is some checking that needs to be done because I inverse the $isPost
bool and that could be buggy
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getObject();
$entityManager = $args->getObjectManager();
$isPost = $entity instanceof Post;
$thread = $isPost ? $post->getThread() : $entity;
$details = $isPost ? $entity : $thread;
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($details->getBody());
$category->setLastPosterUsername($details->getUser()->getUsername());
$category->setLastPostCreatedAt($details->getCreatedAt());
//NOTE the inversion of the isPost bool
//TODO Test this
$category->setIsLastPostOp(!$isPost);
if($isPost){
$category->setPosts($category->getPosts() + 1);
}
$entityManager->merge($category);
$entityManager->flush();
}
$endgroup$
$begingroup$
It works:). Just had to change $post->getThread() to $entity->getThread(), because $post is undefined on line 8
$endgroup$
– user10322178
14 hours ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
user10322178 is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f212210%2fforum-system-implementation%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
How about something like this there is some checking that needs to be done because I inverse the $isPost
bool and that could be buggy
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getObject();
$entityManager = $args->getObjectManager();
$isPost = $entity instanceof Post;
$thread = $isPost ? $post->getThread() : $entity;
$details = $isPost ? $entity : $thread;
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($details->getBody());
$category->setLastPosterUsername($details->getUser()->getUsername());
$category->setLastPostCreatedAt($details->getCreatedAt());
//NOTE the inversion of the isPost bool
//TODO Test this
$category->setIsLastPostOp(!$isPost);
if($isPost){
$category->setPosts($category->getPosts() + 1);
}
$entityManager->merge($category);
$entityManager->flush();
}
$endgroup$
$begingroup$
It works:). Just had to change $post->getThread() to $entity->getThread(), because $post is undefined on line 8
$endgroup$
– user10322178
14 hours ago
add a comment |
$begingroup$
How about something like this there is some checking that needs to be done because I inverse the $isPost
bool and that could be buggy
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getObject();
$entityManager = $args->getObjectManager();
$isPost = $entity instanceof Post;
$thread = $isPost ? $post->getThread() : $entity;
$details = $isPost ? $entity : $thread;
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($details->getBody());
$category->setLastPosterUsername($details->getUser()->getUsername());
$category->setLastPostCreatedAt($details->getCreatedAt());
//NOTE the inversion of the isPost bool
//TODO Test this
$category->setIsLastPostOp(!$isPost);
if($isPost){
$category->setPosts($category->getPosts() + 1);
}
$entityManager->merge($category);
$entityManager->flush();
}
$endgroup$
$begingroup$
It works:). Just had to change $post->getThread() to $entity->getThread(), because $post is undefined on line 8
$endgroup$
– user10322178
14 hours ago
add a comment |
$begingroup$
How about something like this there is some checking that needs to be done because I inverse the $isPost
bool and that could be buggy
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getObject();
$entityManager = $args->getObjectManager();
$isPost = $entity instanceof Post;
$thread = $isPost ? $post->getThread() : $entity;
$details = $isPost ? $entity : $thread;
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($details->getBody());
$category->setLastPosterUsername($details->getUser()->getUsername());
$category->setLastPostCreatedAt($details->getCreatedAt());
//NOTE the inversion of the isPost bool
//TODO Test this
$category->setIsLastPostOp(!$isPost);
if($isPost){
$category->setPosts($category->getPosts() + 1);
}
$entityManager->merge($category);
$entityManager->flush();
}
$endgroup$
How about something like this there is some checking that needs to be done because I inverse the $isPost
bool and that could be buggy
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getObject();
$entityManager = $args->getObjectManager();
$isPost = $entity instanceof Post;
$thread = $isPost ? $post->getThread() : $entity;
$details = $isPost ? $entity : $thread;
$category = $thread->getCategory();
$category->setLastPostThreadTitle($thread->getTitle());
$category->setLastPostThreadSlug($thread->getSlug());
$category->setLastPostBody($details->getBody());
$category->setLastPosterUsername($details->getUser()->getUsername());
$category->setLastPostCreatedAt($details->getCreatedAt());
//NOTE the inversion of the isPost bool
//TODO Test this
$category->setIsLastPostOp(!$isPost);
if($isPost){
$category->setPosts($category->getPosts() + 1);
}
$entityManager->merge($category);
$entityManager->flush();
}
answered 14 hours ago
DanDan
468311
468311
$begingroup$
It works:). Just had to change $post->getThread() to $entity->getThread(), because $post is undefined on line 8
$endgroup$
– user10322178
14 hours ago
add a comment |
$begingroup$
It works:). Just had to change $post->getThread() to $entity->getThread(), because $post is undefined on line 8
$endgroup$
– user10322178
14 hours ago
$begingroup$
It works:). Just had to change $post->getThread() to $entity->getThread(), because $post is undefined on line 8
$endgroup$
– user10322178
14 hours ago
$begingroup$
It works:). Just had to change $post->getThread() to $entity->getThread(), because $post is undefined on line 8
$endgroup$
– user10322178
14 hours ago
add a comment |
user10322178 is a new contributor. Be nice, and check out our Code of Conduct.
user10322178 is a new contributor. Be nice, and check out our Code of Conduct.
user10322178 is a new contributor. Be nice, and check out our Code of Conduct.
user10322178 is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f212210%2fforum-system-implementation%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
Errr.... Move the common code above if?
$endgroup$
– Your Common Sense
14 hours ago