Шпаргалки по симфони
Наверно, у каждого разработчика есть свой список шпор, хочу поделиться своим списком. Как получить Параметр Запроса Напрямую из Шаблона
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