Symfony3.3 form name not in Request - forms

Heads up - I've already been here. Strange issue with Symfony3 forms. So I've created FormType class:
class GetPostType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->setMethod("POST")
->add('phrase', Type\TextType::class);
}
}
As you can see form is not bound to any entity or other object(this shouldn't matter though). Now when I try to handle incoming request with that form:
$postForm = $this->createForm(GetPostType::class);
$postForm->handleRequest($this->request);
... normally handleRequest should submit my form. However:
$postForm->isSubmitted();
is false.
I've tracked down source of issue to HttpFoundationRequestHandler.
} elseif ($request->request->has($name) || $request->files->has($name)) {
According to this my form name is not present in request. That's what I don't get. I'm using Symfony forms at work and there's no problem. I used them in different projects and it was ok. Now for some reason I can't get them to work. It is probably something obvious but I guess I need another pair of eyes to see it.
As you can see I did try to set form method manually(it should be POST by default) but it didn't work. I did clear the cache and stuff. I did try different things I found on the internet but no luck.
I can't find anything that might be the reason. Any ideas what it might be?
UPDATE:
As requested in comments section I provide dump of my request object.
So how do I know it is the right thing? It is accepted by handleRequest method witch expects request type and it contains correct data.
/var/www/story/src/CodeCraft/BlogBundle/Controller/Api/PostController.php:73:
object(Symfony\Component\HttpFoundation\Request)[49]
public 'attributes' =>
object(Symfony\Component\HttpFoundation\ParameterBag)[12]
protected 'parameters' =>
array (size=4)
'_controller' => string 'CodeCraft\BlogBundle\Controller\Api\PostController::getPostsAction' (length=66)
'_route' => string 'blog.api.posts.get' (length=18)
'_route_params' =>
array (size=0)
...
'_firewall_context' => string 'security.firewall.map.context.main' (length=34)
public 'request' =>
object(Symfony\Component\HttpFoundation\ParameterBag)[10]
protected 'parameters' =>
array (size=1)
'phrase' => string 'xxx' (length=3)
public 'query' =>
object(Symfony\Component\HttpFoundation\ParameterBag)[11]
protected 'parameters' =>
array (size=0)
empty
public 'server' =>
object(Symfony\Component\HttpFoundation\ServerBag)[15]
protected 'parameters' =>
array (size=34)
'HTTP_CACHE_CONTROL' => string 'no-cache' (length=8)
'HTTP_POSTMAN_TOKEN' => string '2eea2285-a2f7-4ca5-a799-ea97758d7d20' (length=36)
'CONTENT_TYPE' => string 'application/x-www-form-urlencoded' (length=33)
'HTTP_USER_AGENT' => string 'PostmanRuntime/6.1.6' (length=20)
'HTTP_ACCEPT' => string '*/*' (length=3)
'HTTP_HOST' => string 'story.dev' (length=9)
'HTTP_ACCEPT_ENCODING' => string 'gzip, deflate' (length=13)
'CONTENT_LENGTH' => string '10' (length=2)
'HTTP_CONNECTION' => string 'keep-alive' (length=10)
'PATH' => string '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' (length=60)
'SERVER_SIGNATURE' => string '<address>Apache/2.4.18 (Ubuntu) Server at story.dev Port 80</address>
' (length=70)
'SERVER_SOFTWARE' => string 'Apache/2.4.18 (Ubuntu)' (length=22)
'SERVER_NAME' => string 'story.dev' (length=9)
'SERVER_ADDR' => string '192.168.33.10' (length=13)
'SERVER_PORT' => string '80' (length=2)
'REMOTE_ADDR' => string '192.168.33.1' (length=12)
'DOCUMENT_ROOT' => string '/var/www/story/web' (length=18)
'REQUEST_SCHEME' => string 'http' (length=4)
'CONTEXT_PREFIX' => string '' (length=0)
'CONTEXT_DOCUMENT_ROOT' => string '/var/www/story/web' (length=18)
'SERVER_ADMIN' => string 'webmaster#localhost' (length=19)
'SCRIPT_FILENAME' => string '/var/www/story/web/app_dev.php' (length=30)
'REMOTE_PORT' => string '57039' (length=5)
'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8)
'REQUEST_METHOD' => string 'POST' (length=4)
'QUERY_STRING' => string '' (length=0)
'REQUEST_URI' => string '/app_dev.php/posts' (length=18)
'SCRIPT_NAME' => string '/app_dev.php' (length=12)
'PATH_INFO' => string '/posts' (length=6)
'PATH_TRANSLATED' => string '/var/www/story/web/posts' (length=24)
'PHP_SELF' => string '/app_dev.php/posts' (length=18)
'REQUEST_TIME_FLOAT' => float 1509896560.734
'REQUEST_TIME' => int 1509896560
public 'files' =>
object(Symfony\Component\HttpFoundation\FileBag)[14]
protected 'parameters' =>
array (size=0)
empty
public 'cookies' =>
object(Symfony\Component\HttpFoundation\ParameterBag)[13]
protected 'parameters' =>
array (size=0)
empty
public 'headers' =>
object(Symfony\Component\HttpFoundation\HeaderBag)[16]
protected 'headers' =>
array (size=10)
'cache-control' =>
array (size=1)
...
'postman-token' =>
array (size=1)
...
'content-type' =>
array (size=1)
...
'user-agent' =>
array (size=1)
...
'accept' =>
array (size=1)
...
'host' =>
array (size=1)
...
'accept-encoding' =>
array (size=1)
...
'content-length' =>
array (size=1)
...
'connection' =>
array (size=1)
...
'x-php-ob-level' =>
array (size=1)
...
protected 'cacheControl' =>
array (size=1)
'no-cache' => boolean true
protected 'content' => null
protected 'languages' => null
protected 'charsets' => null
protected 'encodings' => null
protected 'acceptableContentTypes' => null
protected 'pathInfo' => string '/posts' (length=6)
protected 'requestUri' => string '/app_dev.php/posts' (length=18)
protected 'baseUrl' => string '/app_dev.php' (length=12)
protected 'basePath' => null
protected 'method' => string 'POST' (length=4)
protected 'format' => null
protected 'session' =>
object(Symfony\Component\HttpFoundation\Session\Session)[5070]
protected 'storage' =>
object(Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage)[5071]
protected 'bags' =>
array (size=2)
...
protected 'started' => boolean false
protected 'closed' => boolean false
protected 'saveHandler' =>
object(Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy)[5090]
...
protected 'metadataBag' =>
object(Symfony\Component\HttpFoundation\Session\Storage\MetadataBag)[5065]
...
private 'flashName' => string 'flashes' (length=7)
private 'attributeName' => string 'attributes' (length=10)
protected 'locale' => null
protected 'defaultLocale' => string 'en' (length=2)
private 'isHostValid' => boolean true
private 'isClientIpsValid' => boolean true
private 'isForwardedValid' => boolean true

The actual field that would be rendered by your form is named get_post[phrase], not just phrase. Submitting get_post[phrase] in postman will work.
If you don't want that naming scheme you can override the getBlockPrefix method in your Form, eg:
<?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class GetPostType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('phrase', TextType::class);
}
public function getBlockPrefix()
{
return null;
}
}

Related

SubQuery in ActiveRecord

i have following models in yii2:
use frontend\modules\bewerber\models\Bewerber;
use common\modules\basis\models\base\Person;
use common\modules\lookup\models\LAnrede;
How to create following query using methods of ActiveRecord?
SELECT anrede FROM L_anrede JOIN Person ON L_anrede.id=Person.id_anrede WHERE Person.id IN
(SELECT id_person FROM Bewerber WHERE Bewerber.id_person=1);
P.S.: The last WHERE clause should be not fix but variable like this:
var_dump(LAnrede::findOne([$model->id_person])->anrede)
which will put out following result:Mister or Miss
................................................................
Hint for Fabrizio Caldarelli
................................................................
Ur solution won't help me:=(
This is ur code:
$idPerson = 1;
$show=LAnrede::find()->joinWith(['Person' => function($q) use($idPerson) {
$q->andWhere([
'Person.id' => (new \yii\db\Query())->from('Bewerber')->where(['Bewerber.id_person' => $idPerson])
])->anrede;
}]);
and this is var_dump($show);
E:\xampp\htdocs\yii2_perswitch\frontend\modules\bewerber\views\bewerber\index.php:48:
object(common\modules\lookup\models\LAnredeQuery)[207]
public 'sql' => null
public 'on' => null
public 'joinWith' =>
array (size=1)
0 =>
array (size=3)
0 =>
array (size=1)
...
1 => boolean true
2 => string 'LEFT JOIN' (length=9)
public 'select' => null
public 'selectOption' => null
public 'distinct' => null
public 'from' => null
public 'groupBy' => null
public 'join' => null
public 'having' => null
public 'union' => null
public 'params' =>
array (size=0)
empty
private '_events' (yii\base\Component) =>
array (size=0)
empty
private '_behaviors' (yii\base\Component) =>
array (size=0)
empty
public 'where' => null
public 'limit' => null
public 'offset' => null
public 'orderBy' => null
public 'indexBy' => null
public 'emulateExecution' => boolean false
public 'modelClass' => string 'common\modules\lookup\models\LAnrede' (length=36)
public 'with' => null
public 'asArray' => null
public 'multiple' => null
public 'primaryModel' => null
public 'link' => null
public 'via' => null
public 'inverseOf' => null
I use Gridview like this
$gridColumn = [
[
'attribute' => '',
'label' => Yii::t('app', 'Anrede'),
'format' => 'html',
'value' => function($model) {
return "<p><font color='green'>" . LAnrede::findOne([$model->id_person])->anrede . "</p>";
}
],
];
Colud u show me up how to use ur solution in this context?
This should work:
$idPerson = 1;
LAnrede::find()->joinWith(['Person' => function($q) use($idPerson) {
$q->andWhere([
'Person.id' => (new \yii\db\Query())->from('Bewerber')->where(['Bewerber.id_person' => $idPerson])
]);
}])
->all();
'Person' is a relation in LAnrede model (one or many relation?)
public function getPerson()
{
return $this->hasMany(Person::className(), ['id_anrede' => 'id']);
}

zendframework standard URL parameters

i have problems with the zend framework 1, i use a paywall api and it use a pingback url methode, for example:
myurl.com/payback?user_id=123&foo=bar...
But the problem is now i can't read the params in zendframework.
It work only if i do it like that
myurl.com/payback/user_id/123/foo/bar
i used different methodes to read it out:
$q = $this->getRequest()->getQuery();
$p = $this->getRequest()->getParams();
the request object look like that:
object(Zend_Controller_Request_Http)[74]
protected '_paramSources' =>
array (size=2)
0 => string '_GET' (length=4)
1 => string '_POST' (length=5)
protected '_requestUri' => string '/index/paywall?uid=zIhvpyVslUS5ND79AfMeBPao1LjXY2Kc&goodsid=6001&slength=&speriod=&type=0&ref=&is_test=1&sig=c62538caf7a36ea2f3a795bb3dc32c07' (length=141)
protected '_baseUrl' => string '' (length=0)
protected '_basePath' => null
protected '_pathInfo' => string '/index/paywall' (length=14)
protected '_params' =>
array (size=3)
'controller' => string 'index' (length=5)
'action' => string 'paywall' (length=7)
'module' => string 'default' (length=7)
protected '_rawBody' => null
protected '_aliases' =>
array (size=0)
empty
protected '_dispatched' => boolean true
protected '_module' => string 'default' (length=7)
protected '_moduleKey' => string 'module' (length=6)
protected '_controller' => string 'index' (length=5)
protected '_controllerKey' => string 'controller' (length=10)
protected '_action' => string 'paywall' (length=7)
protected '_actionKey' => string 'action' (length=6)
I Hope someone can help me,
thank you

symfony, cant pass validation on a embedded form + file

Trying to embed a collection or just a simple type containing a file field, but both result in the same problem. On post the UploadedFile is present, but validation fails. "This value is not valid."
Bashing my head in all day, anyone?
Company form:
Simple embed with a file:
$builder->add('logo', new FileType(), [
'label' => 'Logo',
'required' => false,
'attr' => [
'accept' => 'image/*',
]
]);
Collection with files:
$builder->add('images', 'collection', array(
'type' => new FileType(),
'data' => [
new File(),
new File(),
new File(),
],
));
FileType:
class FileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$data = $builder->getData();
$builder->add('file', 'file', [
'label' => 'Bestand',
]);
$builder->add('submit', 'submit', [
'label' => 'Save',
]);
}
public function getName()
{
return 'file';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\DemoBundle\Entity\File',
));
}
}
The entity has a functioniong one-to-many from Company to File.
Everything works, but when the form is submitted. Both fields have a "This value is not valid." error.
Here is a dump of the clientData preSubmit:
'logo' =>
object(Symfony\Component\HttpFoundation\File\UploadedFile)[13]
private 'test' => boolean false
private 'originalName' => string 'etc.jpg' (length=13)
private 'mimeType' => string 'image/jpeg' (length=10)
private 'size' => int 103843
private 'error' => int 0
'images' =>
array (size=3)
0 =>
object(Symfony\Component\HttpFoundation\File\UploadedFile)[14]
private 'test' => boolean false
private 'originalName' => string 'Screen Shot 2014-07-24 at 17.15.30.png' (length=38)
private 'mimeType' => string 'image/png' (length=9)
private 'size' => int 84102
private 'error' => int 0
1 => null
2 => null
Seems perfectly fine to me!

Storing an instance of Zend_Log in Zend_Cache/Zend_Registry with/without custom helper

I am trying to store an instance of Zend_Log (with Zend_Log_Writer_Stream) to Zend_Cache(preferably) or Zend_Registry(fallback) but with the custom helper as an abstraction layer instead of direct access.
Problem
Except when using Zend_Registry directly, everytime Zend_Log_Writer_Stream's _stream property disappears.
I have attached my code below along with the output it generates.
I am not following these links because I have another writer Zend_Log_Writer_Database that writes to a separate database than application so i need to initialize that. For now i have commented it out.
Bootstrap.php - clipped
protected function _initLog() {
// instantiate CacheOrRegistry variable.
$this->_cor = Helper_SCacheOrRegistry::getInstance();
// make sure its not already cached and config for this resource exists.
if ($this->_cor->exists('logger') || !($config = $this->_config->resources->log))
return;
$logger = new Zend_Log();
$config = $config->toArray();
/*
if (isset($config['db']) && is_array($config['db'])) {
$dbParams = $config['db'];
$writerDb = new Zend_Log_Writer_Db(
$this->_cor->get('logDb'),
$dbParams['writerParams']['table'],
$dbParams['writerParams']['columnMapping']);
if (isset($dbParams['filterName'])) {
switch ($dbParams['filterName']) {
case 'Priority':
$writerDb->addFilter(new Zend_Log_Filter_Priority($dbParams['filterParams']['priority']));
break;
}
}
$logger->addWriter($writerDb);
}
*/
if( 'development' === APPLICATION_ENV) {
$fileParams = $this->_options['resources']['log']['file'];
if(!isset($fileParams) || !(is_array($fileParams)))
return;
$writerFile = new Zend_Log_Writer_Stream($fileParams['writerParams']['path'],$fileParams['writerParams']['mode']);
$writerFile->setFormatter(new Zend_Log_Formatter_Simple($fileParams['writerParams']['format']));
if (isset($fileParams['filterName'])) {
switch ($fileParams['filterName']) {
case 'Priority':
$writerFile->addFilter(new Zend_Log_Filter_Priority($fileParams['filterParams']['priority']));
break;
}
}
$logger->addWriter($writerFile);
}
$logger->setEventItem('user_agent', $_SERVER['HTTP_USER_AGENT']);
$logger->setEventItem('get_vars', serialize($_GET));
$logger->setEventItem('post_vars', serialize($_POST));
$logger->setEventItem('ip', $_SERVER['REMOTE_ADDR']);
$logger->setEventItem('username', $this->_username);
// This has issue of missing _stream, Using Custom Helper with Registry use force.
$this->_cor->set('logger', $logger, true);
$loggerRC = $this->_cor->get('logger', true);
// This also has issue of missing _stream, Using Custom Helper with apc Cache
$this->_cor->set('logger', $logger);
$loggerCC = $this->_cor->get('logger');
// This works perfectly.
Zend_Registry::set($this->_cor->createCacheId('loggerR'), $logger);
$loggerZ = Zend_Registry::get($this->_cor->createCacheId('loggerR'));
// This also seems to have issue of missing _stream, Using apc Cache directly
$cache = Zend_Registry::get('apcCache');
$cache->save($logger, $this->_cor->createCacheId('loggerC'));
$loggerC = $cache->load($this->_cor->createCacheId('loggerC'));
echo "<h3>Logger, local variable</h3>";
var_dump($logger);
echo "<h3>Logger, from Registry using custom helper</h3>";
var_dump($loggerRC);
echo "<h3>Logger, from apc cache using custom helper</h3>";
var_dump($loggerCC);
echo "<h3>Logger, from Zend_Registry, direct.</h3>";
var_dump($loggerZ);
echo "<h3>Logger, from apc Cache, Direct.</h3>";
var_dump($loggerC);
exit;
}
Helper_SCacheOrRegistry.php
class Helper_SCacheOrRegistry {
private $_source;
private static $_instance;
private $_functionsArray = array('Cache' => array(
'get' => '_getFromCache',
'set' => '_saveInCache',
'del' => '_deleteFromCache',
'exists' => '_existsInCache'),
'Registry' => array(
'get' => '_getFromRegistry',
'set' => '_saveInRegistry',
'del' => '_deleteFromRegistry',
'exists' => '_existsInRegistry',
)
);
public static function getInstance() {
if (!isset(self::$_instance)) {
$c = __CLASS__;
self::$_instance = new $c();
}
return self::$_instance;
}
private function _getSource($forceRegistry = null) {
if(true === $forceRegistry)
return Zend_Registry::getInstance();
if (Zend_Registry::getInstance()->offsetExists('apcCache'))
return Zend_Registry::get('apcCache');
else
return Zend_Registry::getInstance();
}
private function _isSourceCache() {
return (!$this->_source instanceof Zend_Registry);
}
public function createCacheId($id) {
return md5(',e#Q!u$#~\|3Pa^e1%oh&s0*<h(7)o-+h/t.' . $id);
}
public function set($key, $value, $forceRegistry = null) {
$this->_fire('set', $this->createCacheId($key), $value, $forceRegistry);
}
public function get($key, $forceRegistry = null) {
return $this->_fire('get', $this->createCacheId($key), null, $forceRegistry);
}
public function del($key, $forceRegistry = null) {
return $this->_fire('del', $this->createCacheId($key), null, $forceRegistry);
}
public function exists($key, $forceRegistry = null) {
return $this->_fire('exists', $this->createCacheId($key), null, $forceRegistry);
}
private function _fire($method, $key, $value = null, $forceRegistry = null) {
$this->_source = $this->_getSource($forceRegistry);
$call = ($this->_isSourceCache()) ?
$this->_functionsArray['Cache'][$method] : $this->_functionsArray['Registry'][$method];
return (isset($value)) ? $this->$call($key, $value) : $this->$call($key);
}
private function _getFromCache($key) {
return $this->_existsInCache($key);
}
private function _saveInCache($key, $value) {
if ($this->_existsInCache($key))
return false;
$this->_source->save($value, $key);
return true;
}
private function _deleteFromCache($key) {
if (!$this->_existsInCache($key))
return false;
$this->_source->remove($key);
return true;
}
private function _existsInCache($key) {
return $this->_source->load($key);
}
private function _getFromRegistry($key) {
if ($this->_existsInRegistry($key))
return unserialize($this->_source->get($key));
return false;
}
private function _saveInRegistry($key, $value) {
if ($this->_existsInRegistry($key))
return false;
$this->_source->set($key, serialize($value));
return true;
}
private function _deleteFromRegistry($key) {
if (!$this->_existsInCache($key))
return false;
$this->_source->offsetUnset($key);
return true;
}
private function _existsInRegistry($key) {
return $this->_source->isRegistered($key);
}
}
Output:
Logger, local variable
object(Zend_Log)[84]
protected '_priorities' =>
array
0 => string 'EMERG' (length=5)
1 => string 'ALERT' (length=5)
2 => string 'CRIT' (length=4)
3 => string 'ERR' (length=3)
4 => string 'WARN' (length=4)
5 => string 'NOTICE' (length=6)
6 => string 'INFO' (length=4)
7 => string 'DEBUG' (length=5)
protected '_writers' =>
array
0 =>
object(Zend_Log_Writer_Stream)[93]
protected '_stream' => resource(77, stream)
protected '_filters' =>
array
0 =>
object(Zend_Log_Filter_Priority)[94]
protected '_priority' => int 7
protected '_operator' => string '<=' (length=2)
protected '_formatter' =>
object(Zend_Log_Formatter_Simple)[95]
protected '_format' => string ' [ %ip% ] - [ %timestamp% ] [ %user_agent% ] - [ %username% ]
[ %priorityName% : %message% ]
[ POST: %post_vars% ]
[ GET: %get_vars% ]
' (length=161)
protected '_filters' =>
array
empty
protected '_extras' =>
array
'user_agent' => string 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.18 Safari/535.1' (length=99)
'get_vars' => string 'a:0:{}' (length=6)
'post_vars' => string 'a:0:{}' (length=6)
'ip' => string '127.0.0.1' (length=9)
'username' => string 'guest' (length=5)
protected '_defaultWriterNamespace' => string 'Zend_Log_Writer' (length=15)
protected '_defaultFilterNamespace' => string 'Zend_Log_Filter' (length=15)
protected '_defaultFormatterNamespace' => string 'Zend_Log_Formatter' (length=18)
protected '_origErrorHandler' => null
protected '_registeredErrorHandler' => boolean false
protected '_errorHandlerMap' => boolean false
protected '_timestampFormat' => string 'c' (length=1)
Logger, from Registry using custom helper
object(Zend_Log)[96]
protected '_priorities' =>
array
0 => string 'EMERG' (length=5)
1 => string 'ALERT' (length=5)
2 => string 'CRIT' (length=4)
3 => string 'ERR' (length=3)
4 => string 'WARN' (length=4)
5 => string 'NOTICE' (length=6)
6 => string 'INFO' (length=4)
7 => string 'DEBUG' (length=5)
protected '_writers' =>
array
0 =>
object(Zend_Log_Writer_Stream)[97]
protected '_stream' => int 0
protected '_filters' =>
array
0 =>
object(Zend_Log_Filter_Priority)[98]
protected '_priority' => int 7
protected '_operator' => string '<=' (length=2)
protected '_formatter' =>
object(Zend_Log_Formatter_Simple)[99]
protected '_format' => string ' [ %ip% ] - [ %timestamp% ] [ %user_agent% ] - [ %username% ]
[ %priorityName% : %message% ]
[ POST: %post_vars% ]
[ GET: %get_vars% ]
' (length=161)
protected '_filters' =>
array
empty
protected '_extras' =>
array
'user_agent' => string 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.18 Safari/535.1' (length=99)
'get_vars' => string 'a:0:{}' (length=6)
'post_vars' => string 'a:0:{}' (length=6)
'ip' => string '127.0.0.1' (length=9)
'username' => string 'guest' (length=5)
protected '_defaultWriterNamespace' => string 'Zend_Log_Writer' (length=15)
protected '_defaultFilterNamespace' => string 'Zend_Log_Filter' (length=15)
protected '_defaultFormatterNamespace' => string 'Zend_Log_Formatter' (length=18)
protected '_origErrorHandler' => null
protected '_registeredErrorHandler' => boolean false
protected '_errorHandlerMap' => boolean false
protected '_timestampFormat' => string 'c' (length=1)
Logger, from apc cache using custom helper
object(Zend_Log)[100]
protected '_priorities' =>
array
0 => string 'EMERG' (length=5)
1 => string 'ALERT' (length=5)
2 => string 'CRIT' (length=4)
3 => string 'ERR' (length=3)
4 => string 'WARN' (length=4)
5 => string 'NOTICE' (length=6)
6 => string 'INFO' (length=4)
7 => string 'DEBUG' (length=5)
protected '_writers' =>
array
0 =>
object(Zend_Log_Writer_Stream)[101]
protected '_stream' => int 0
protected '_filters' =>
array
0 =>
object(Zend_Log_Filter_Priority)[102]
protected '_priority' => int 7
protected '_operator' => string '<=' (length=2)
protected '_formatter' =>
object(Zend_Log_Formatter_Simple)[103]
protected '_format' => string ' [ %ip% ] - [ %timestamp% ] [ %user_agent% ] - [ %username% ]
[ %priorityName% : %message% ]
[ POST: %post_vars% ]
[ GET: %get_vars% ]
' (length=161)
protected '_filters' =>
array
empty
protected '_extras' =>
array
'user_agent' => string 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.18 Safari/535.1' (length=99)
'get_vars' => string 'a:0:{}' (length=6)
'post_vars' => string 'a:0:{}' (length=6)
'ip' => string '127.0.0.1' (length=9)
'username' => string 'guest' (length=5)
protected '_defaultWriterNamespace' => string 'Zend_Log_Writer' (length=15)
protected '_defaultFilterNamespace' => string 'Zend_Log_Filter' (length=15)
protected '_defaultFormatterNamespace' => string 'Zend_Log_Formatter' (length=18)
protected '_origErrorHandler' => null
protected '_registeredErrorHandler' => boolean false
protected '_errorHandlerMap' => boolean false
protected '_timestampFormat' => string 'c' (length=1)
Logger, from Zend_Registry, direct.
object(Zend_Log)[84]
protected '_priorities' =>
array
0 => string 'EMERG' (length=5)
1 => string 'ALERT' (length=5)
2 => string 'CRIT' (length=4)
3 => string 'ERR' (length=3)
4 => string 'WARN' (length=4)
5 => string 'NOTICE' (length=6)
6 => string 'INFO' (length=4)
7 => string 'DEBUG' (length=5)
protected '_writers' =>
array
0 =>
object(Zend_Log_Writer_Stream)[93]
protected '_stream' => resource(77, stream)
protected '_filters' =>
array
0 =>
object(Zend_Log_Filter_Priority)[94]
protected '_priority' => int 7
protected '_operator' => string '<=' (length=2)
protected '_formatter' =>
object(Zend_Log_Formatter_Simple)[95]
protected '_format' => string ' [ %ip% ] - [ %timestamp% ] [ %user_agent% ] - [ %username% ]
[ %priorityName% : %message% ]
[ POST: %post_vars% ]
[ GET: %get_vars% ]
' (length=161)
protected '_filters' =>
array
empty
protected '_extras' =>
array
'user_agent' => string 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.18 Safari/535.1' (length=99)
'get_vars' => string 'a:0:{}' (length=6)
'post_vars' => string 'a:0:{}' (length=6)
'ip' => string '127.0.0.1' (length=9)
'username' => string 'guest' (length=5)
protected '_defaultWriterNamespace' => string 'Zend_Log_Writer' (length=15)
protected '_defaultFilterNamespace' => string 'Zend_Log_Filter' (length=15)
protected '_defaultFormatterNamespace' => string 'Zend_Log_Formatter' (length=18)
protected '_origErrorHandler' => null
protected '_registeredErrorHandler' => boolean false
protected '_errorHandlerMap' => boolean false
protected '_timestampFormat' => string 'c' (length=1)
Logger, from apc Cache, Direct.
object(Zend_Log)[104]
protected '_priorities' =>
array
0 => string 'EMERG' (length=5)
1 => string 'ALERT' (length=5)
2 => string 'CRIT' (length=4)
3 => string 'ERR' (length=3)
4 => string 'WARN' (length=4)
5 => string 'NOTICE' (length=6)
6 => string 'INFO' (length=4)
7 => string 'DEBUG' (length=5)
protected '_writers' =>
array
0 =>
object(Zend_Log_Writer_Stream)[105]
protected '_stream' => int 0
protected '_filters' =>
array
0 =>
object(Zend_Log_Filter_Priority)[106]
protected '_priority' => int 7
protected '_operator' => string '<=' (length=2)
protected '_formatter' =>
object(Zend_Log_Formatter_Simple)[107]
protected '_format' => string ' [ %ip% ] - [ %timestamp% ] [ %user_agent% ] - [ %username% ]
[ %priorityName% : %message% ]
[ POST: %post_vars% ]
[ GET: %get_vars% ]
' (length=161)
protected '_filters' =>
array
empty
protected '_extras' =>
array
'user_agent' => string 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.18 Safari/535.1' (length=99)
'get_vars' => string 'a:0:{}' (length=6)
'post_vars' => string 'a:0:{}' (length=6)
'ip' => string '127.0.0.1' (length=9)
'username' => string 'guest' (length=5)
protected '_defaultWriterNamespace' => string 'Zend_Log_Writer' (length=15)
protected '_defaultFilterNamespace' => string 'Zend_Log_Filter' (length=15)
protected '_defaultFormatterNamespace' => string 'Zend_Log_Formatter' (length=18)
protected '_origErrorHandler' => null
protected '_registeredErrorHandler' => boolean false
protected '_errorHandlerMap' => boolean false
protected '_timestampFormat' => string 'c' (length=1)
Zend_Log shouldn't be serialized when stored.
Zend_Cache isn't an option because it required objects to be serialized as it stores only strings.
Zend_Registry wasn't working through helper class as there was some serialization going on due to the code. Removing that fixed the issue.
So in short:
Use Zend_Registry to store objects
Do not serialize when storing in Zend_Registry

Trying to unset a field before saving it, using offsetUnset()

I'm trying to unset a field before saving it, exactly in the executeCreate() function generated by sf. I'm using this:
$this->configuration->getForm()->getWidgetSchema()->offsetUnset('clients');
var_dump($this->configuration->getForm()->getWidgetSchema());
But after that the field "clients" is still there:
object(sfWidgetFormSchema)[180]
protected 'formFormatters' =>
array
empty
protected 'fields' =>
array
'id' =>
object(sfWidgetFormInputHidden)[211]
protected 'parent' =>
&object(sfWidgetFormSchema)[180]
protected 'requiredOptions' =>
array
...
protected 'attributes' =>
array
...
protected 'options' =>
array
...
'name' =>
object(sfWidgetFormInputText)[212]
protected 'parent' =>
&object(sfWidgetFormSchema)[180]
protected 'requiredOptions' =>
array
...
protected 'attributes' =>
array
...
protected 'options' =>
array
...
'clients' =>
object(sfWidgetFormInputText)[184]
protected 'parent' =>
&object(sfWidgetFormSchema)[180]
protected 'requiredOptions' =>
array
...
protected 'attributes' =>
array
...
protected 'options' =>
array
...
'_csrf_token' =>
object(sfWidgetFormInputHidden)[203]
protected 'parent' =>
&object(sfWidgetFormSchema)[180]
protected 'requiredOptions' =>
array
...
protected 'attributes' =>
array
...
protected 'options' =>
array
...
Any idea?
sf 1.4
Javi
You can unset form fields at form class, method configure:
class ClientsForm extends BaseClientsForm
{
public function configure()
{
unset($this['field1'], $this['field2']);
}
}
This removes field from form and from SQL query generated for saving this form