从子函数返回重定向
Returning a redirect from a child function
我正在做一个 Symfony 项目。它设置了自定义访问控制(动态创建并存储在数据库中。)因此,我创建了一个自定义 BaseController class,它允许我进行单行调用以验证访问。这是其中的一些代码:
class BaseController extends AbstractController
{
function prepare($customer, $product, $right) {
// These are all defined in the class.
$this->loadCompany($customer);
$this->canAccessProduct($product);
$this->checkAccessRights($customer, $product, $right);
}
}
准备方法在每个控制器的顶部被调用。例如:
class IndexController extends BaseController {
/**
* @Route("/{customer}/download",
* name="download_home")
*/
function customerIndex($customer)
{
$this->prepare($customer, "download", "read");
}
}
现在我想做的改变是:我想从路由中删除 {customer} 并将其加载为 "prepare" 函数调用的一部分。因此,我想将客户存储在会话变量中。如果未设置会话变量,我想重定向到另一个控制器。这是在 Symfony 中使用 return $this->redirectToRoute("app_company_select")
完成的。那么我可以设置它以便 return 在 $this->prepare()
中调用 return 控制器功能吗?
我已尝试 parent::return()
但出现未知功能错误。还有另一种方法吗?
然后直接从你所在的地方重定向。只要您还没有发送任何 headers,这应该可以正常工作。
public function prepare(...)
{
$hasAccess = false
// Check for access
if(!$hasAccess){
(new RedirectResponse('/go/somewhere'))->send();
exit;
}
}
我正在做一个 Symfony 项目。它设置了自定义访问控制(动态创建并存储在数据库中。)因此,我创建了一个自定义 BaseController class,它允许我进行单行调用以验证访问。这是其中的一些代码:
class BaseController extends AbstractController
{
function prepare($customer, $product, $right) {
// These are all defined in the class.
$this->loadCompany($customer);
$this->canAccessProduct($product);
$this->checkAccessRights($customer, $product, $right);
}
}
准备方法在每个控制器的顶部被调用。例如:
class IndexController extends BaseController {
/**
* @Route("/{customer}/download",
* name="download_home")
*/
function customerIndex($customer)
{
$this->prepare($customer, "download", "read");
}
}
现在我想做的改变是:我想从路由中删除 {customer} 并将其加载为 "prepare" 函数调用的一部分。因此,我想将客户存储在会话变量中。如果未设置会话变量,我想重定向到另一个控制器。这是在 Symfony 中使用 return $this->redirectToRoute("app_company_select")
完成的。那么我可以设置它以便 return 在 $this->prepare()
中调用 return 控制器功能吗?
我已尝试 parent::return()
但出现未知功能错误。还有另一种方法吗?
然后直接从你所在的地方重定向。只要您还没有发送任何 headers,这应该可以正常工作。
public function prepare(...)
{
$hasAccess = false
// Check for access
if(!$hasAccess){
(new RedirectResponse('/go/somewhere'))->send();
exit;
}
}