I am developing an API using CakePHP 3 framework. Now I'm sending a GET request from POSTMAN client. User will pass an API key in the header.
I wanna fetch this header in my controller function.
This is how my controller looks like
namespace Api\Controller;
use Cake\Auth\DefaultPasswordHasher;
use Api\Controller\AppController;
use Cake\Cache\Cache;
use Cake\Http\ServerRequest;
class ApiController extends AppController
{
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler');
}
public function myinfo()
{
if($this->request->is('get')) {
$key = $this->request->getHeaderLine('Authorization');
$this->set('key', $key);
}
$this->set('_serialize', ['key']);
}
}
The error that I'm getting is: HeaderLine is not a function
I also tried some more options:
$acceptHeader = $this->request->getHeader('Authorization');
but this also threw similar error. Header is not a function.
Reference: Link
CakePHP version: 3.3.5
As @ndm said in the OP comments, the last example in the linked doc should solve your problem. You are using a version prior to 3.4 so you have to use:
// Prior to 3.4.0
$key = $this->request->header('Authorization');
Refere document for Reading HTTP Header
Here mentioned that "Allows you to access any of the HTTP_* headers that were used for the request". Means it reads only http headers like
Also mentioned that "While some apache installs don’t make the Authorization header accessible, CakePHP will make it available through apache specific methods as required."
So For Solution
They all have different obscure settings you can tweak to overrule this behaviour, but you'll need to determine exactly which module is to blame.
You can work around this issue by passing the header directly to PHP via the env:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Also Refere: Zend Server Windows - Authorization header is not passed to PHP script
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With