Symfony parancsok
amiket sokat kerestem, hogy többet ne kelljen
//sfGuardUser ID:
sfContext::getInstance()->getUser()->getGuardUser()->getId()
//Hogyan alakitsuk egy objetum name tulajdonságát id 'formátumura':
get_id_from_name($name)
// form formázása (<p> stílus):
// http://www.thatsquality.com/articles/7-days-of-symfony-1-1-forms-widgets-and-validators-day7
$formatter = $this->getWidgetSchema()->getFormFormatter();
$formatter->setErrorRowFormat('%errors%');
$formatter->setErrorListFormatInARow("%errors%\n");
$formatter->setErrorRowFormatInARow("<p class='error-message'>%error%</p>");
$formatter->setRowFormat("%error%<p>%label%%field%%help%%hidden_fields%</p>\n");
// ez alapból nem hívodik meg. De ha a formatter használja, pl: embeddformnál:
$formatter->setDecoratorFormat('<table class="tgTextSlot">%content%</table>');
// hogyan adjunk egy form elemnek classt:
// formban :
$this->WidgetSchema['name']->setAttribute('class', 'classname');
// templateben 1:
echo $form->render(array('name' => array('class' => 'classname'), 'name2' => array('class'=>'classname'))) ;
// templateben 2:
echo $form['name']->renderRow(array('class' => 'classname'));
//formban widget mozgatása:
$this->getWidgetSchema()->moveField('widget_name', sfWidgetFormSchema::AFTER, 'last_name');
//$this változóinak lekérdezése
$this->getVarHolder()->getAll()
//SF_ENVIRONMENT 1.2 alatt:
sfConfig::get('sf_environment')
// összes request paraméter lekérése
$this->getRequest()->getParameterHolder()->getAll();
sfContext::getInstance()->getRequest()->getParameterHolder()->getAll()
// egy bizonyos request paraméter lekérése
$this->getRequestParameter('parameter', false);
sfContext::getInstance()->getRequest()->getParameter('parameter');
// controllerben helper használata
sfLoader::loadHelpers(array('Tag', 'Url'));
sfContext::getInstance()->getConfiguration()->loadHelpers(array('Tag', 'Url'));
//i18N akárhol:
sfContext::getInstance()->getI18N()->__('Nincs kiválasztva')
i18N formban:
$this->getWidgetSchema()->getFormFormatter()->translate('szoveg');
// Ez inkább propel. A model osztályból, annak sql neve:
constant(get_class($this->getPeer()).'::TABLE_NAME')
// ajax link
echo link_to_remote('postolunk', array(
'update' => 'a div id-ja amibe a visszatérő adatokat kapjuk',
'url' => 'az ajaxos url',
'method' => 'post',
//ez meghívja a validate javascript függvényt:
'condition' => "validate(Form.serialize('formId'))",
//és a legfontosabb, így lehet a form adatait is elküldeni:
'submit' => "formId"
))
// A form mezői:
$this->getWidgetSchema()->getPositions()
// egy form hibát dob, de az épp rejtett, akkor irassuk ki.
$this->form->getErrorSchema()
foreach($this->form->getErrorSchema()->getErrors() as $key => $error)
{
echo '<p>' . $key . ': ' . $error . '</p>';
}
// absolute url:
link_to(__('szöveg', array(), 'messages'), '@url', array('absolute'=>true))
Callback validator
class aForm extends aBaseForm
{
public function configure()
{
parent::configure() ; //esetleg ez nem fontos
$this->validatorSchema->setPostValidator(new sfValidatorCallback(array('callback' => array($this, 'fuggvenyneve'))));
}
public function fuggvenyneve(sfValidatorBase $validator, array $values)
{
// $values tartalmazza az összes adatot, feldolgozod és a $hibavan-nak ennek függvényében értéket adsz:
if ($hibavan)
{
throw new sfValidatorError($validator, 'hibaüzenet');
}
return $values;
}
}
Propel
$c = new Criteria();
$c->addJoin(
array(ReaderFavoritePeer::BOOK_ID,ReaderFavoritePeer::READER_ID),
array(BookOpinionPeer::BOOK_ID,BookOpinionPeer::READER_ID))
// és irassuk is ki a criteriát SQL-ben
echo $criteria->toString();
// szerezzük meg az ID-kat egy táblából.
$c = new Criteria();
$c->addSelectColumn(MyClassPeer::ID);
$res = BasePeer::doSelect($c);
$Ids = $res->fetchAll(PDO::FETCH_COLUMN,0);
// SELECT FROM `tabla` WHERE (tabla.mezo1='string1' OR (tabla.mezo1='string2' AND tabla.mezo2='0'))
$c = new Criteria();
$cr1 = $c->getNewCriterion(TablePeer::MEZO1, 'string1');
$cr2 = $c->getNewCriterion(TablePeer::MEZO1, 'string2');
$cr3 = $c->getNewCriterion(TablePeer::MEZO2, '0');
$cr2->addAnd($cr3);
$cr1->addOr($cr2);
$c->add($cr1);
$c->toString();
Task
./symfony i18n:extract frontend hu --auto-save ./symfony i18n:extract frontend hu --display-new
Internationalization
//http://www.php.net/manual/en/function.strftime.php
fb(format_date(time(), 'f'),'f');
fb(format_date(time(), 'G'),'G');
fb(format_date(time(), 'y'),'y');
fb(format_date(time(), 'M'),'M');
fb(format_date(time(), 'd'),'d');
fb(format_date(time(), 'h'),'h');
fb(format_date(time(), 'H'),'H');
fb(format_date(time(), 'm'),'m');
fb(format_date(time(), 's'),'s');
fb(format_date(time(), 'E'),'E');
fb(format_date(time(), 'D'),'D');
fb(format_date(time(), 'F'),'F');
fb(format_date(time(), 'W'),'W');
fb(format_date(time(), 'w'),'w');
fb(format_date(time(), 'a'),'a');
fb(format_date(time(), 'k'),'k');
fb(format_date(time(), 'K'),'K');
fb(format_date(time(), 'z'),'z');
A smarty egyszerű
{assign var='createdat' value=$current_page->getCreatedAt()}
{assign var='createdat' value=$createdat|strtotime}
{capture assign='createdat'}
{format_date date=$createdat format="D"}
{/capture}
<p class="date">{$createdat}</p>
// Mert PHP-ban ennyi:
<?php echo format_date(strtotime($current_page->getCreatedAt())), 'D'); ?>
Add a custom filter field for generated admin
public function configure() {
$this->widgetSchema['title'] = new sfWidgetFormFilterInput();
$this->validatorSchema['title'] = new sfValidatorPass(array('required' => false));
}//configure
public function getFields() {
return array_merge(array(
'title'=> 'Title',
), parent::getFields()
);
} //getFields
protected function addTitleColumnCriteria(Criteria $criteria, $field, $values) {
// $values['text'] contains the field value, use it to change $criteria object
// es. $criteria->add ('column', $values['text'])
}//addTitleColumnCriteria
loggolás külön fájlba.
$text = var_export($this->getObject()->toArray(), true);
$file = sfConfig::get('sf_log_dir').DIRECTORY_SEPARATOR.'debug.log';
$dispatcher = sfContext::getInstance()->getEventDispatcher();
$logger = new sfFileLogger($dispatcher, array('file' => $file) );
$dispatcher->disconnect('application.log', array($logger, 'listenToLogEvent'));
$logger->err($text);
$logger->notice($text);
$logger->info($text);
Doctrine:
//kapcsolt táblák lekérdezése:
foreach (Doctrine_Core::getTable('CompanyLog')->getRelations() as $name => $relation)
{
echo $name . ":\n"; echo "Local - " . $relation->getLocal() . "\n"; echo "Foreign - " . $relation->getForeign() . "\n\n";
}
hogyan formázzunk egy sfWidgetFormChoice widgetet?
// a widget
$this->widgetSchema ['my_widget'] = new sfWidgetFormChoice(array('multiple' => true, 'expanded' => true, 'choices' => my_choices, 'renderer_class' => 'sfWidgetFormSelectCheckbox', 'renderer_options' => array('formatter' => array('MyForm', 'MyFormatter'))));
$this->validatorSchema ['my_widget'] = new sfValidatorChoice(array('multiple' => true, 'choices' => array_keys(my_choices), 'required' => false));
// és a formban:
public static function MyFormatter($widget, $inputs) {
$result = '<table>';
foreach ($inputs as $input) {
$result .= '<tr><td>' . $input ['label'] . ' ' . $input ['input'] . '</td></tr>';
}
$result .= '</table>';
return $result;
}
néha szükségünk lehet egy olyan widgetre, ami egy tömböt/listát tartalmaz.
Én most egy két dimenziós tömböt fogok megjeleníteni:
protected function getWidgetFormSchemaForMyField($choices)
{
$widget = new sfWidgetFormSchema(array(
'mezo1' => new sfWidgetFormPlain(),
'mezo2' => new sfWidgetFormInputHidden(),
'mezo3' => new sfWidgetFormChoice(array('choices'=>$choices))
));
// a mezők a táblázat egyes cellái lesznek, tehát egymás mellett lesznek:
$widget->getFormFormatter()->setRowFormat('<td>%error%%field%%help%%hidden_fields%</td>');
return $widget;
}
public function configure()
{
...
// itt le kell kérni a rekordokat
// a choices tömbnek is értéket kell adni
$widgetrows = array();
foreach ($records as $key=>$record)
{
$widgetrows[$key] = $this->getWidgetFormSchemaForMyField($choices);
}
$widget = new sfWidgetFormSchema($widgetrows);
$formatter = $widget->getFormFormatter();
// a táblázat egyes sorai (a fenti három mező egy sorban, de azokból több sor lesz):
$formatter->setRowFormat('<tr>%error%%field%%help%%hidden_fields%</tr>');
$this->widgetSchema['mezo'] = new sfWidgetFormSchema(array($widget));
$formatter = $this->widgetSchema['mezo']->getFormFormatter();
// bele kell tenni az egészet egy táblázatba:
$formatter->setRowFormat('<table>%error%%field%%help%%hidden_fields%</table>');
...
}
Egy jó postvalidator leírás:
blog.codeclarity.com/2010/03/09/conditional-validation-in-symfony-forms/

Ide kérjük a választ!