If you want to do it exactly like it is done on the backend, you can use the admin generator on frontend applications. A more general and customizable way would be to simply create list and filter actions and use Symfony's form filters. Here's a basic example for a model class "Article":
In an actions class:
class articleActions extends sfActions
{
public function executeList(sfWebRequest $request)
{
$this->form = new ArticleFormFilter();
$this->pager = new new sfDoctrinePager('Article');
}
public function executeFilter(sfWebRequest $request)
{
$this->form = new ArticleFormFilter();
$this->form->bind($request[$this->form->getName()]);
if ($this->form->isValid())
{
$this->pager = new new sfDoctrinePager('Article');
$this->pager->setQuery($this->form->getQuery());
$this->setTemplate('list');
}
//handle invalid form here
}
}
In view, iterate throw pager like this:
foreach($pager->getResults() as $article)
Doctrine FormFilter's are fairly similar to Doctrine forms. Get started by configuring the form inside of FormFilter::configure();