在 Symfony 2 的模板中创建方法的位置
Where to create method to use in templates in Symfony 2
在我的模板中,我想调用一个函数来显示 Company.Employee 中 Employee 的总计数,与 Department 相关,Department 与 Company 在一对多关系中相关。
{% for com in company %}
{{ com.name }}
{{ com.description }}
{{ com.getNumberOfEmp|length }} //this a function must display counts of employee
{% endfor %}
在控制器中
$em = $this->getDoctrine()->getManager();
$company = $em->getRepository('Bundle:Company')->findAll();
我应该把 getNumberOfEmp 方法放在哪里?
在 Symfony 1.4 中,我通过将 getNumberOfEmp 放在将调用 company.table.class
的 company.class 中轻松实现了这一点
另外一个问题是,如何正确使用Doctrine或者DQL来查询多个Join?
这个功能我试过了不知道是不是正确的方法
companyrepository.php
public function getNumberOfEmp()
{
return $this
->createQueryBuilder()
->select('e.firstname')
->from('Emp e')
->leftJoin('e.Department d')
->leftJoin('d.Company c')
->where('i.id =:$id)
->setParameter('id',$this->id)// I am confused about this since i want to display all names of the company
->getQuery()
->getResult()
;
}
在 Symfony 1.4 中我是这样使用的
//company.class.php
public function getNumberOfEmp()
{
$emp = Doctrine_Core::getTable('Company')->createQuery('c')
->select('v.firstname')
->from('Employeers e')
->leftJoin('e.Department d')
->leftJoin('d.Company c')
->where('c.id=?',$this->id);
return $emp->execute();
}
并在 php 模板中轻松调用它
<?php foreach ($company as $com): ?>
<?php echo $com->name ?>/display name of company
<?php echo $com->description ?>//description
<?php echo count($com.getNumberOfEmp) ?>//dispalys number of employees
<?php endforeach ?>
有什么想法吗?
只需创建一个树枝扩展,然后将其与参数一起使用;类似于:
分机 class:
<?php
namespace WHERE\YOU_WANT\TO\CREATE_IT;
class TestExtension extends \Twig_Extension
{
protected $em;
public function __construct($em)
{
$this->em = $em;
}
public function getFunctions()
{
return array(
//this is the name of the function you will use in twig
new \Twig_SimpleFunction('number_employees', array($this, 'a'))
);
}
public function getName()
{
return 'nbr_employees';
}
public function a($id)
{
$qb=$this->em->createQueryBuilder();
$qb->select('count(n.id)')
->from('XYZYOurBundle:Employee','n')
->where('n.company = :x)
->setParameter('x',$id);
$count = $qb->getQuery()->getSingleScalarResult();
return $count;
}
}
在 service.yml 中定义您的扩展并注入实体管理器:
numberemployees:
class: THE\EXTENSION\NAMESPACE\TestExtension
tags:
- { name: twig.extension }
arguments:
em: "@doctrine.orm.entity_manager"
最后您可以在您的模板中使用它,例如:
{% for com in company %}
{{ com.name }}
{{ com.description }}
{{ number_employees(com.id) }}
{% endfor %}
在我的模板中,我想调用一个函数来显示 Company.Employee 中 Employee 的总计数,与 Department 相关,Department 与 Company 在一对多关系中相关。
{% for com in company %}
{{ com.name }}
{{ com.description }}
{{ com.getNumberOfEmp|length }} //this a function must display counts of employee
{% endfor %}
在控制器中
$em = $this->getDoctrine()->getManager();
$company = $em->getRepository('Bundle:Company')->findAll();
我应该把 getNumberOfEmp 方法放在哪里?
在 Symfony 1.4 中,我通过将 getNumberOfEmp 放在将调用 company.table.class
的 company.class 中轻松实现了这一点另外一个问题是,如何正确使用Doctrine或者DQL来查询多个Join? 这个功能我试过了不知道是不是正确的方法
companyrepository.php
public function getNumberOfEmp()
{
return $this
->createQueryBuilder()
->select('e.firstname')
->from('Emp e')
->leftJoin('e.Department d')
->leftJoin('d.Company c')
->where('i.id =:$id)
->setParameter('id',$this->id)// I am confused about this since i want to display all names of the company
->getQuery()
->getResult()
;
}
在 Symfony 1.4 中我是这样使用的
//company.class.php
public function getNumberOfEmp()
{
$emp = Doctrine_Core::getTable('Company')->createQuery('c')
->select('v.firstname')
->from('Employeers e')
->leftJoin('e.Department d')
->leftJoin('d.Company c')
->where('c.id=?',$this->id);
return $emp->execute();
}
并在 php 模板中轻松调用它
<?php foreach ($company as $com): ?>
<?php echo $com->name ?>/display name of company
<?php echo $com->description ?>//description
<?php echo count($com.getNumberOfEmp) ?>//dispalys number of employees
<?php endforeach ?>
有什么想法吗?
只需创建一个树枝扩展,然后将其与参数一起使用;类似于:
分机 class:
<?php
namespace WHERE\YOU_WANT\TO\CREATE_IT;
class TestExtension extends \Twig_Extension
{
protected $em;
public function __construct($em)
{
$this->em = $em;
}
public function getFunctions()
{
return array(
//this is the name of the function you will use in twig
new \Twig_SimpleFunction('number_employees', array($this, 'a'))
);
}
public function getName()
{
return 'nbr_employees';
}
public function a($id)
{
$qb=$this->em->createQueryBuilder();
$qb->select('count(n.id)')
->from('XYZYOurBundle:Employee','n')
->where('n.company = :x)
->setParameter('x',$id);
$count = $qb->getQuery()->getSingleScalarResult();
return $count;
}
}
在 service.yml 中定义您的扩展并注入实体管理器:
numberemployees:
class: THE\EXTENSION\NAMESPACE\TestExtension
tags:
- { name: twig.extension }
arguments:
em: "@doctrine.orm.entity_manager"
最后您可以在您的模板中使用它,例如:
{% for com in company %}
{{ com.name }}
{{ com.description }}
{{ number_employees(com.id) }}
{% endfor %}