在哪里编写自定义函数以及如何导入它们?

时间:2014-03-09 19:26:18

标签: php symfony stofdoctrineextensions application-structure

这是我的小故事:我在我的实体帐户上使用DoctrinExtensions树。用户可以在UI中编辑树,然后保存它。我将所有帐户的数组发送回PHP。然后我想将其重建为树,并使用扩展方法保存/编辑帐户。

所以我想将UI返回的数组与db中的原始树进行比较。 我通过这样的方式得到数据:

$repo = $em->getRepository('NRtworksChartOfAccountsBundle:Accounttree');
$arrayTree = $repo->findAll(); 

所以我把我的树放在一个数组中。我现在想要的是通过它的ID在这个数组中找到一个对象。我知道如何编写函数,但是在MVC中我不知道什么是正确的写入和调用它的地方,也不是正确的方法。

我尝试创建一个文件夹“Model”和一个文件Functions.php,如下所示:

 namespace NRtworks\ChartOfAccountsBundle\Model;

 function get_account_from_id($array)
 {
    return "true";    
 }

然后从我的控制器中调用它

use NRtworks\ChartOfAccountsBundle\Model\Functions;
get_account_from_id($arrayTree);

但这不起作用。 请告知我应该如何做到这一点,以及MVC理念范围内是否有更正确的方法。

感谢

2 个答案:

答案 0 :(得分:0)

您应该编写自定义服务并将逻辑放入其中。 Doc:http://symfony.com/doc/current/book/service_container.html#what-is-a-service

更新(代码示例):

Les在Container中配置服务:

# app/config/config.yml
services:
    your_service:
        class:        NRtworks\ChartOfAccountsBundle\Service\YourService

现在,您的服务类:

namespace NRtworks\ChartOfAccountsBundle\Service;

class YourService {
    public function getAccountFromId(array $array)
    {
        return "true";
    }
}

现在您可以从容器中获取此服务,如:

class SomeController extends Controller {
    public function someMethod() {
        $yourService = $this->get('your_service');
    }
}

您甚至可以将存储库类注入此服务,例如:

# app/config/config.yml
services:
    app.accounTtree.repository:
        class:           Doctrine\ORM\EntityRepository
        factory-service: doctrine.orm.entity_manager
        factory-method:  getRepository
        arguments: 
            - "App\MainBundle\Entity\Gallery"

    your_service:
        class:        NRtworks\ChartOfAccountsBundle\Service\YourService
        calls: 
            - [ setRepository, ["@app.accounTtree.repository"]]

只需修改您的服务:

namespace NRtworks\ChartOfAccountsBundle\Service;

class YourService {
    protected $repository;

    public class setRepository($repository) {
        $this->repository = $repository;
    }

    public function getAccountFromId(array $array)
    {
        return "true";
    }
}

答案 1 :(得分:0)

如果我们谈论从学说中提取的自定义数据处理,那么最好使用Repository类。它是为此目的而设计的。