错误:无法直接访问CakePHP

时间:2013-06-27 14:30:37

标签: cakephp

我正在调用的元素文件:

      $brand = $this->requestAction('brands/buyer_getnames/');

我正在调用的动作文件:

    public function buyer_getnames(){
               $newid=$this->Auth->User('brand_id');
                   $name=$this->Brand->find('first',array('conditions'=>array('Brand.id'=>$newid),'recursive'=>-1));
    return $name['Brand']['name'];
}

在下方收到错误.. !!

Private Method in BrandsController

Error: BrandsController::buyer_getnames() cannot be accessed directly.

请帮忙

2 个答案:

答案 0 :(得分:5)

请求操作遵循正常的URL路由规则

如果您使用的是prefix routing,则无法通过function prefix_foo()形式的网址访问/controller/prefix_foo - 它必须是相应的前缀网址:/prefix/controller/foo

因此,您的请求操作应该是:

$brand = $this->requestAction('/prefix/brands/getnames/');

请注意,如果该方法所做的唯一事情是调用模型方法,那么最好只做:

$model = ClassRegistry::init('Brand');
$brand = $model->someMethod();

答案 1 :(得分:2)

如果使用requestAction方法请求您的操作,则可以允许未经授权的访问操作。

例如:

public function beforeFilter() {
    parent::beforeFilter();

    if ($this->request->is('requested') && $this->request->params['action'] == 'index') {
        $this->Auth->allow(array('index'));
    }
}

这也可能有效(尚未测试):

public function index() {
    if ($this->request->is('requested')) {
        $this->Auth->allow(array('index'));
    }
}

请告诉我是否可以为您提供更多帮助。