从子函数返回重定向

时间:2019-06-23 17:28:07

标签: php symfony symfony4

我正在从事Symfony项目。它具有设置的自定义访问控制(可以动态创建并存储在数据库中。)因此,我创建了一个自定义BaseController类,该类允许我进行单线调用以验证访问。这是其中的一些代码:

sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* /usr/local/lib/dtrace/node.d ~/.npm ~/.node-gyp /opt/local/bin/node opt/local/include/node /opt/local/lib/node_modules /usr/local/lib/node* /usr/local/include/node* /usr/local/bin/node*

prepare方法在每个控制器的顶部调用。例如:

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);
    }
}

现在这是我要进行的更改:我想从路由中删除{customer},而是将其作为“准备”函数调用的一部分进行加载。因此,我想将客户存储在会话变量中。如果未设置会话变量,我想重定向到其他控制器。这在Symfony中使用class IndexController extends BaseController { /** * @Route("/{customer}/download", * name="download_home") */ function customerIndex($customer) { $this->prepare($customer, "download", "read"); } } 完成。那么我可以设置它以便在return $this->redirectToRoute("app_company_select")中返回一个返回调用,该返回调用也返回控制器功能吗?

我尝试了$this->prepare(),但是给出了未知的函数错误。还有另一种方法吗?

1 个答案:

答案 0 :(得分:1)

然后直接从您所在的位置重定向。只要您还没有发送任何标题,就可以正常工作。

public function prepare(...)
{
    $hasAccess = false
    // Check for access
    if(!$hasAccess){
        (new RedirectResponse('/go/somewhere'))->send();
        exit;
    }
}