Вот мой простой класс App \ Libraries \ Gelocation.php ,
namespace App\Libraries; use Location; use Illuminate\Http\Request; class GeoLocation { public function getLocationByIP($ip = null) { // If IP address is set if ($ip) { $location = Location::get($ip); } else { $location = Location::get(); } // Get the location by city return $location->cityName; } public function getLocationByCoordinates($longitute, $latitude) { // } public function getLocation(Request $request) { // Check if the location is already set in the cookie if ($request->cookie('location')) { return $request->cookie('location'); } else { $location = $this->getLocationByIP(); // Set location in the cookie $request->cookie()->forever('location', $location); return $location; } } }
Я использую этот класс в своем контроллере PagesController.php следующим образом,
namespace App\Http\Controllers; use App\Libraries\GeoLocation; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class PagesController extends Controller { public $location; public function __construct(GeoLocation $location) { $this->location = $location; } public function index() { dd($this->location->getLocation()); return view('pages.index'); } }
Однако, когда я запускаю этот код, я получаю эту ошибку,
ОшибкаException в строке GeoLocation.php 28:
Аргумент 1, переданный в App \ Libraries \ GeoLocation :: getLocation () должен быть экземпляром Illuminate \ Http \ Request, не указанным, вызываемым в /var/www/blogs/app/Http/Controllers/PagesController.php в строке 22 и определенный
Вам просто нужно ввести Request
в конструктор геолокации следующим образом:
namespace App\Libraries; use Location; use Illuminate\Http\Request; class GeoLocation { public function __construct(Request $request){ $this->request = $request; } public function getLocationByIP($ip = null) { // If IP address is set if ($ip) { $location = Location::get($ip); } else { $location = Location::get(); } // Get the location by city return $location->cityName; } public function getLocationByCoordinates($longitute, $latitude) { // } public function getLocation() //no need to inject here { // Check if the location is already set in the cookie if ($this->request->cookie('location')) { return $request->cookie('location'); } else { $location = $this->getLocationByIP(); // Set location in the cookie $request->cookie()->forever('location', $location); return $location; } } }
Вы не передаете запрос в качестве аргумента в методе индекса, попробуйте следующее:
public function index(Request $request) { // here you forgot the parameter dd($this->location->getLocation($request)); return view('pages.index'); }