我在哪里存储misc功能?我该如何使用它们?它应该是DependencyInjection吗?它应该只是一个班级,我做的是use Acme\Bundle\AcmeBundle\Misc\ClientIPChecker
吗?
说我有一个功能:
<?php
class ClientIPChecker {
public static function isLocal(Request $request){
return in_array('127.0.0.1', $request->getClientIp())
}
}
我想在两个控制器中使用此功能。我如何在Symfony2中执行此操作?
答案 0 :(得分:1)
如果您有一组一致的函数,则将它们放在类/服务中。如果函数执行不同的操作,则将它们放在适当的类/服务中。在这种特殊情况下,我会选择自定义Request
或自定义Controller
(可能是后者,包含混乱app.php
或app_dev.php
)。
使用自定义控制器时,这不起作用:
// Automatic binding of $request parameter
public function indexAction(Request $request)
{
// Won't work with custom controller
if ($request->isLocal)) {
// ...
}
// You have to do
if ($this->getRequest()->isLocal()) {
// stuff
}
}
选项1:扩展Symfony Request
namespace My\HttpFoundation;
use Symfony\Component\HttpFoundation\Request as BaseRequest;
class Request extends BaseRequest
{
public function isLocal()
{
return in_array('127.0.0.1', $this->getClientIp());
}
}
然后在web/app.php
和web/app_dev.php
修改:
use Symfony\Component\HttpFoundation\Request;
是:
use My\HttpFoundation\Request;
选项2:创建BaseAbstractController
并使用它代替Symfony控制器
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
abstract class BaseAbstractController extends Controller
{
public function isRequestLocal()
{
return in_array('127.0.0.1', $this->getRequest()->getClientIp())
}
}
选项3:解释here
的自定义服务