Шпаргалки по симфони

Symfony framework

Автор: Александр Степанов

5 февр. 2013 г., 10:47:01  2204


Наверно, у каждого разработчика есть свой список шпор, хочу поделиться своим списком. Как получить Параметр Запроса Напрямую из Шаблона

get('name') ?>

Проверка Существования Параметра Запроса в Шаблоне

has('name')): ?>
  

Hello, get('name') ?>!

Hello, John Doe!

Работа с YAML

В YAML файлах запрещена табуляция # Никогда не используйте tab

all:
-> mail:
-> -> webmaster:  [email protected]
# Используйте пробелы
all:
  mail:
    webmaster: [email protected]

Если ваше приложение неожиданно перестало работать после изменения настроек, нужно проверить, не сделали ли вы какую-то из распространенных ошибок: Вы пропустили пробел между ключем (key) и значением (value):

key1:value1      # Пропущен пробел после двоеточия

Ключи в последовательности имеют разный отступ:

all:
  key1:  value1
   key2: value2  # Тут отступ не такой же как у других параметров
  key3:  value3

Наличие зарезервированного символа YAML в ключе или значении, не заключенном в кавычки: message: tell him: go way # :, [, ], { и } в YAML зарезервированы message: 'tell him: go way' # корректный синтаксис Вы изменили закомментированную строку

# key: value     # Это опция не обрабатывается, так как в начале строки стоит символ `#`

Вы повторно задали значение для одного ключа на одном уровне:

key1: value1
key2: value2
key1: value3     # ключ key1 задан дважды, и будет равен последнему значению

Вы подразумевайте, что значение будет иметь какой либо специальный тип. На самом деле это всегда строка, и вам нужно ее конвертировать: income: 12,345 # пока вы не конвертируйте этот параметр, его тип значения — строка. Получаем данные из YAML

$test = sfYaml::load('/path/to/test.yml');
print_r($test);

Режимы работы

http://localhost/myapp_dev.php/mymodule/index Если вы хотите посмотреть приложение в рабочем режиме, вызовите соответственный фронт-контроллер: http://localhost/index.php/mymodule/index

Объекты контроллера

sfController: объект контроллера (->getController()) sfRequest: объект запроса (->getRequest()) sfResponse: объект пакета ответа (->getResponse()) sfUser: объект сессии пользователя (->getUser()) sfDatabaseConnection: соединение с базой данных (->getDatabaseConnection()) sfLogger: объект журнала событий (->getLogger()) sfI18N: объект интернационализации (->getI18N()) $sf_context: Весь объект контекста (экземпляр sfContext) $sf_request: Объект запроса (экземпляр sfRequest) $sf_params: Параметры запроса $sf_user: Объект текущей сессии пользователя (экземпляр sfUser)

Template

$this->setTemplate('myCustomTemplate');

Загрузка файлов

class mymoduleActions extends sfActions
{
  public function executeUpload()
  {
    if ($this->getRequest()->hasFiles())
    {
      foreach ($this->getRequest()->getFileNames() as $fileName)
      {
        $fileSize  = $this->getRequest()->getFileSize($fileName);
        $fileType  = $this->getRequest()->getFileType($fileName);
        $fileError = $this->getRequest()->hasFileError($fileName);
        $uploadDir = sfConfig::get('sf_upload_dir');
        $this->getRequest()->moveFile('file', $uploadDir.'/'.$fileName);
      }
    }
  }
}

Работа с пользовательскими данными

class mymoduleActions extends sfActions
{
  public function executeFirstPage()
  {
    $nickname = $this->getRequestParameter('nickname');

    // сохранение данных в сессии пользователя
    $this->getUser()->setAttribute('nickname', $nickname);
  }

  public function executeSecondPage()
  {
    // получение данных из сессии с определением значения по умолчанию
    $nickname = $this->getUser()->getAttribute('nickname', 'Anonymous Coward');
  }
}

Изменение имени для cookie в apps/myapp/config/factories.yml

all:
  storage:
    class: sfSessionStorage
    param:
      session_name: my_cookie_name

Запросы в БД (Propel)

  $query = "Select some query where year = ? and name = ?";
  $con = Propel::getConnection();
  $stmt = $con->prepareStatement($query);
  $stmt->setInt(1, $year);
  $stmt->setString(2, $name);
  $rs = $stmt->executeQuery();
  while ($rs->next()){
    //store your results here using an array or objects
    //$arrayOrObject = $rs->getInt("fieldName");
  }

Составление Criteria

WHERE column = value	->add(column, value);
WHERE column <> value	->add(column, value, Criteria::NOT_EQUAL);
Other Comparison Operators	
> , <	Criteria::GREATER_THAN, Criteria::LESS_THAN
>=, <=	Criteria::GREATER_EQUAL, Criteria::LESS_EQUAL
IS NULL, IS NOT NULL	Criteria::ISNULL, Criteria::ISNOTNULL
LIKE, ILIKE	Criteria::LIKE, Criteria::ILIKE
IN, NOT IN	Criteria::IN, Criteria::NOT_IN
Other SQL Keywords	
ORDER BY column ASC	->addAscendingOrderByColumn(column);
ORDER BY column DESC	->addDescendingOrderByColumn(column);
LIMIT limit	->setLimit(limit)
OFFSET offset	->setOffset(offset)
FROM table1, table2 WHERE table1.col1 = table2.col2	->addJoin(col1, col2)
FROM table1 LEFT JOIN table2 ON table1.col1 = table2.col2	->addJoin(col1, col2, Criteria::LEFT_JOIN)
FROM table1 RIGHT JOIN table2 ON table1.col1 = table2.col2	->addJoin(col1, col2, Criteria::RIGHT_JOIN)

Узнать акшн из темплейта

$sf_params->get('action')
$sf_params->get('module');
$sf_request->getParameter('action');
$sf_request->getParameter('module');

Узнать из action

$this->getRequest()->getParameter('action');
$this->getRequest()->getParameter('module') ;

Роутинг

$r = new sfRouting();
$r->setRoutes(sfRouting::getInstance()->getRoutes());
$params = $r->parse($myUrl);
$module = $params['module'];
$action = $params['action'];

HTTP headers

$response->setContentType('text/xml');
$response->setHttpHeader('Content-Language', 'en');
$response->setStatusCode(403);
$response->addVaryHttpHeader('Accept-Language');
$response->addCacheControlHttpHeader('no-cache');

Cookies

$response->setCookie($name, $content, $expire, $path, $domain);

Metas and page headers

$response->addMeta('robots', 'NONE');
$response->addMeta('keywords', 'foo bar');
$response->setTitle('My FooBar Page');
$response->addStyleSheet('custom_style');
$response->addJavaScript('custom_behavior');

Хелперы

sfProjectConfiguration::getActive()->loadHelpers('Date');

Локализация

$this->embedI18n(array('ru', 'en'));
$this->embedI18n(sfConfig::get('app_i18n_cultures'));
$this->embedI18nForAllCultures();

Работа с формами

$form['element_name']->render();  // renders just the form element itself (e.g. the input tag)
$form['element_name']->renderLabel();	// renders just the label element
$form['element_name']->renderRow();  // renders the full decorated row (which includes both the element and label)

And...
$form['element_name']->renderError();		// renders the error if there is one
$form['element_name']->renderLabelName();	// renders just the name of the label

Other good things to know

$form['element_name']->getValue();	// returns the current value of the field