8. ['UA camp']
Конфигурация роута по умолчанию
variable_prefixes: [':']
'/article/$year/$month/$day/$title' вместо
'/article/:year/:month/:day/:title'.
segment_separators: ['/', '.']
'/article/:year-:month-:day/:title'
9. ['UA camp']
Конфигурация роута опции 1.2
generate_shortest_url: генерация коротких
URL, насколько это возможно
extra_parameters_as_query_string: генерация
дополнительных параметров в виде запроса
11. ['UA camp']
extra_parameters_as_query_string
articles:
url: /articles
options: { extra_parameters_as_query_string: true }
echo url_for('@articles?page=1');
с генерирует /articles?page=1
и не будет совпадать с таким роутом в
symfony 1.1
13. ['UA camp']
Каждый роут, определенный в
routing.yml, преобразуется в объект
класса sfRoute
article:
url: /article/:id
param: { module: article, action: index }
class: myRoute
14. ['UA camp']
sfRequestRoute работа с методами
HTTP: GET, POST, HEAD, DELETE и PUT
post:
url: /post/:id
class: sfRequestRoute
requirements:
sf_method: get
echo link_to('Great article',
'@article?id=1&sf_method=get'));
15. ['UA camp']
sf_method — нафиг нужен
/user/new + GET => user/new
/user + GET => user/index
/user + POST => user/create
16. ['UA camp']
sf_method — нафиг нужен
/user/1 + GET => user/show?id=1
/user/1/edit + GET => user/edit?id=1
/user/1 + PUT => user/update?id=1
/user/1 + DELETE => user/delete?id=1
17. ['UA camp']
sfObjectRoute — роуты как объекты
post:
url: /post/:id
params: { module: blog, action: show }
class: sfObjectRoute
options: { model: psBlog, type: object, method: getById }
requirements:
id: d+
В postActions:
public function executeShow(sfWebRequest $request)
{
$this->post = $this->getRoute()->getObject();
}
18. ['UA camp']
sfObjectRoute — роуты как объекты
class psBlog extends BasepsBlog
{
static public function getById($parameters)
{
return psBlogPeer::retrieveByPk($parameters['id']);
}
}
В шаблоне:
<?php echo $post->getTitle() ?>
19. ['UA camp']
sfPropelRoute связь роута моделью
blog:
url: /blog
params: { module: blog, action: list }
class: sfPropelRoute
options: { model: psBlog, type: list}
В postActions:
public function executeBlog(sfWebRequest $request)
{
$this->blog = $this->getRoute()->getObjects();
}
20. ['UA camp']
sfPropelRoute связь роута моделью
В шаблоне:
<?php foreach ($blog as $post): ?>
<?php echo $post->getTitle() ?><br />
<?php endforeach; ?>
28. ['UA camp']
php symfony app:routes frontend
list:
blog GET /blog.:sf_format
new:
blog_new GET /blog/new.:sf_format
create: blog_create POST
/blog.:sf_format
edit:
blog_edit GET /blog/:id/edit.:sf_format
update: blog_update PUT
/blog/:id.:sf_format
delete: blog_delete DELETE /blog/:id.:sf_format
29. ['UA camp']
sfPropelRouteCollection — options
model: имя модели
actions: список экшенов из 7 доступных
module: имя модуля
prefix_path: префик к каждому роуту
column: имя поля primary key (id по умолчанию)
with_show: добалять метод show или нет
segment_names: другие имена для new и edit экшенов
model_methods: медоты для получения объектов
requirements: требования к параметрам
route_class: sfObjectRoute для sfObjectRouteCollection и
sfPropelRoute для sfPropelRouteCollection
with_wildcard_routes: позволяет добавлять новые маршруты
для объектов, роуты для акшинов, которые управляют
списками
31. ['UA camp']
php symfony
propel:generate-module-for-route
frontend blog
32. ['UA camp']
class articlesActions extends sfActions
{
public function executeIndex($request) {}
public function executeShow($request) {}
public function executeNew($request) {}
public function executeCreate($request) {}
public function executeEdit($request) {}
public function executeUpdate($request) {}
public function executeDelete($request) {}
protected function processForm($request, $form)
{}
}
33. ['UA camp']
Динамический роутинг
sfPatternRouting:
appendRoute — добавляет новый роут
prependRoute — добавляет роут в начала списка
insertRouteBefore — добавляет роут перед заданым
роутом
sfContext::getInstance()->getRouting()->prependRoute(
'post_by_id', // Имя роута
'/post/:id', // Шаблон
array('module' => 'blog', 'action' => 'show'), // Значения
array('id' => 'd+'), // Требования к данным
);
http://www.charnad.com/blog/symfony-dinamicheskij-routing/
38. ['UA camp']
Проблема с trailing slash
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
...
# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/$
RewriteRule ^(.*)/$ $1 [R=301,L]
…
</IfModule>
39. ['UA camp']
symfony route без symfony
sfRoute это отдельный компопнент
symfony Platform
http://pookey.co.uk/blog/archives/79-Playing-
with-symfony-routing-without-symfony.html