我正在从事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()
,但是给出了未知的函数错误。还有另一种方法吗?
答案 0 :(得分:1)
然后直接从您所在的位置重定向。只要您还没有发送任何标题,就可以正常工作。
public function prepare(...)
{
$hasAccess = false
// Check for access
if(!$hasAccess){
(new RedirectResponse('/go/somewhere'))->send();
exit;
}
}