0

I just start learning PHP few days ago so forgive me if this question is a newbie one. What is wrong with my declaration of CRAWLER_URI ? The env() isn't working outside a method and I don't know why.

namespace App\Http\Controllers;

use GuzzleHttp\Client; 

class SpotifyController extends Controller
{
    const CRAWLER_URI = env('CRAWLER_URI') . ':' . env('CRAWLER_PORT');

    /**
     * Send a GET to Crawler API
     * @return a json crawled by an external API crawler
     */
    public function fetch()
    {
        $client   = new Client(['base_uri' => self::CRAWLER_URI]);
        $response = $client->request('GET');

        dd($response);
    }
}
miken32
  • 42,008
  • 16
  • 111
  • 154
TimothePearce
  • 1,128
  • 1
  • 11
  • 22

1 Answers1

2

So, the issue here is that you can’t use a function as a class constant value:

According to the PHP manual:

The value must be a constant expression, not (for example) a variable, a property, or a function call.

There are many solutions to this problem, for example, if you really want it to be constant, you could use a define() statement like this:

define('CRAWLER_URI', env('CRAWLER_URI') . ':' . env('CRAWLER_PORT'));

and access it like this:

echo CRAWLER_URI;

Another method would be to use a static function:

private static function CRAWLER_URI() {
    return env('CRAWLER_URI') . ':' . env('CRAWLER_PORT');
}

and access it like this:

echo $this->CRAWLER_URI();
Luca
  • 169
  • 1
  • 1
  • 10