这是我的小故事:我在我的实体帐户上使用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理念范围内是否有更正确的方法。
感谢
答案 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类。它是为此目的而设计的。