Created
June 15, 2011 06:19
-
-
Save j/1026584 to your computer and use it in GitHub Desktop.
The Error
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Fatal error: method_exists(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Proxies\JStoutMainBundleEntityLocationProxy" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /www/jstout/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php on line 2266 Call Stack: 0.0001 622816 1. {main}() /www/jstout/web/app_dev.php:0 0.0120 1391096 2. Symfony\Component\HttpKernel\Kernel->handle() /www/jstout/web/app_dev.php:21 0.0155 1643168 3. Symfony\Bundle\FrameworkBundle\HttpKernel->handle() /www/jstout/app/bootstrap.php.cache:612 0.0155 1643888 4. Symfony\Component\HttpKernel\HttpKernel->handle() /www/jstout/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/HttpKernel.php:44 0.0155 1643888 5. Symfony\Component\HttpKernel\HttpKernel->handleRaw() /www/jstout/app/bootstrap.php.cache:416 0.0808 3808568 6. call_user_func_array() /www/jstout/app/bootstrap.php.cache:438 0.0808 3808816 7. JStout\MainBundle\Controller\VendorController->signupAction() /www/jstout/app/bootstrap.php.cache:0 0.1496 5248224 8. JStout\MainBundle\Form\Vendor\SignupHandler->process() /www/jstout/src/JStout/MainBundle/Controller/VendorController.php:55 0.1994 6163232 9. Doctrine\ORM\EntityManager->flush() /www/jstout/src/JStout/MainBundle/Form/Vendor/SignupHandler.php:57 0.1994 6163232 10. Doctrine\ORM\UnitOfWork->commit() /www/jstout/vendor/doctrine/lib/Doctrine/ORM/EntityManager.php:328 0.1994 6163232 11. Doctrine\ORM\UnitOfWork->computeChangeSets() /www/jstout/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php:249 0.1998 6187424 12. Doctrine\ORM\UnitOfWork->computeChangeSet() /www/jstout/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php:505 0.2000 6196648 13. Doctrine\ORM\UnitOfWork->computeAssociationChanges() /www/jstout/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php:490 0.2000 6221624 14. Doctrine\ORM\UnitOfWork::objToStr() /www/jstout/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php:572 0.2000 6221752 15. method_exists() /www/jstout/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php:2266 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace JStout\MainBundle\Form\Vendor; | |
use JStout\MainBundle\Component\Form\FormHandlerInterface, | |
Symfony\Component\Form\Form, | |
Symfony\Component\HttpFoundation\Request, | |
Doctrine\ORM\EntityManager, | |
JStout\MainBundle\Entity, | |
Symfony\Component\Security\Acl\Domain\ObjectIdentity, | |
Symfony\Component\Security\Acl\Domain\UserSecurityIdentity, | |
Symfony\Component\Security\Acl\Permission\MaskBuilder; | |
class SignupHandler implements FormHandlerInterface | |
{ | |
protected $form; | |
protected $request; | |
protected $entityManager; | |
public function buildFormHandler(Form $form, Request $request, EntityManager $entityManager) | |
{ | |
$this->form = $form; | |
$this->request = $request; | |
$this->entityManager = $entityManager; | |
} | |
public function process(array $extras) | |
{ | |
if ('POST' == $this->request->getMethod()) { | |
// bind form data | |
$this->form->bindRequest($this->request); | |
// If form is valid | |
if ($this->form->isValid() && ($vendor = $this->form->getData()) instanceOf Entity\Vendor) { | |
// If owner is valid, create user | |
if ($vendor->getOwner() instanceOf Entity\User) { | |
$encoder = $extras['encoderFactory']->getEncoder($vendor->getOwner()); | |
$salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36); | |
$vendor->getOwner()->setSalt($salt); | |
$vendor->getOwner()->setPassword($encoder->encodePassword($vendor->getOwner()->getPlainPassword(), $salt)); | |
$vendor->getOwner()->setEnabled(1); | |
$vendor->getOwner()->addRole('USER_VENDOR'); | |
} | |
// persist vendor | |
$this->entityManager->persist($vendor); | |
$this->entityManager->flush(); | |
// create acl | |
$acl = $extras['aclProvider']->createAcl(ObjectIdentity::fromDomainObject($vendor)); | |
// grant owner access | |
$acl->insertObjectAce(UserSecurityIdentity::fromAccount($vendor->getOwner()), MaskBuilder::MASK_OWNER); | |
// update acl | |
$extras['aclProvider']->updateAcl($acl); | |
return $vendor; | |
} | |
} | |
return false; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace JStout\MainBundle\Form\Vendor; | |
use Symfony\Component\Form\AbstractType, | |
Symfony\Component\Form\FormBuilder, | |
JStout\MainBundle\Form\User\SignupType as UserType, | |
JStout\MainBundle\Form\Common\LocationType; | |
class SignupType extends AbstractType | |
{ | |
protected $loggedIn = false; | |
public function __constructor($security) | |
{ | |
$this->loggedIn = $security->isGranted('ROLE_USER'); | |
} | |
public function buildForm(FormBuilder $builder, array $options) | |
{ | |
if (false === $this->isLoggedIn()) { | |
$builder->add('owner', new UserType()); | |
} | |
$builder | |
->add('name') | |
->add('website') | |
->add('phone') | |
->add('phoneExt') | |
->add('description') | |
->add('locations', new VendorLocationType()); | |
} | |
public function getDefaultOptions(array $options) | |
{ | |
return array( | |
'data_class' => 'JStout\MainBundle\Entity\Vendor' | |
); | |
} | |
protected function isLoggedIn() | |
{ | |
return $this->loggedIn; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace JStout\MainBundle\Controller; | |
use Symfony\Bundle\FrameworkBundle\Controller\Controller, | |
Sensio\Bundle\FrameworkExtraBundle\Configuration as Extra, | |
JStout\MainBundle\Component\Form\FormHandlerInterface, | |
JStout\MainBundle\Entity\User, | |
JStout\MainBundle\Entity\Vendor, | |
JStout\MainBundle\Entity\Location, | |
JStout\MainBundle\Form\Vendor\SignupType, | |
JStout\MainBundle\Form\Vendor\SignupHandler; | |
/** | |
* @Extra\Route("/vendor") | |
*/ | |
class VendorController extends Controller | |
{ | |
/** | |
* @Extra\Route(name="vendor_index") | |
* @Extra\Template() | |
*/ | |
public function indexAction() | |
{ | |
return array(); | |
} | |
/** | |
* @Extra\Route("/sign-up", name="vendor_signup") | |
* @Extra\Template() | |
*/ | |
public function signupAction() | |
{ | |
// initialize new vendor | |
$vendor = new Vendor(); | |
if (($user = $this->get('request')->getSession()->get('user')) instanceOf User) { | |
$vendor->setOwner($user); | |
} | |
// get vendor signup form | |
$form = $this->get('form.factory')->create(new SignupType(), $vendor); | |
// get form handler for vendor form | |
$formHandler = $this->get('form.handler')->create(new SignupHandler(), $form); | |
// extra data for form handler | |
$extras = array( | |
'encoderFactory' => $this->get('security.encoder_factory'), | |
'aclProvider' => $this->get('security.acl.provider') | |
); | |
// redirect if form submission was valid | |
if (($vendor = $formHandler->process($extras)) instanceOf Vendor) { | |
return $this->redirect($this->generateUrl('vendor_index')); | |
} | |
return array( | |
'form' => $form->createView() | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment