Как пространство имен связывается с папками? - PullRequest
0 голосов
/ 22 октября 2018

(я изучал, как работают пространства имен, но люди объясняют это с помощью функционального PoV, а не физического)

У меня проблема с Laravel, но это не настоящая проблема: в блоге папка app У меня есть следующий код

<?php
namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
//...
?>

Например, третий упомянутый файл находится в \ blog \ vendor \ laravel \ framework \ src \ Illuminate \ Foundation \ Auth

Как, черт возьми, он вообще вычисляет эту часть blog \ vendor \ laravel \ framework \ src ?

Я попытался "щелкнуть правой кнопкой мыши, чтобы перейти к объявлению" сPhpStorm и он связал меня с нужным файлом.Как он узнал?Используя WampServer, я открыл приложение , а не vendor ...

Примечание: причина, по которой я спрашиваю это, заключается в том, что я получаю Class 'Illuminate \ Foundation \Auth \ User 'не найден в [...] , когда я пытаюсь открыть этот файл ... (хотя PhpStorm нашел его!)

1 Ответ

0 голосов
/ 22 октября 2018

Нет определенного способа управлять этими отношениями между пространством имен и физическим файлом, они технически не связаны.Однако, чтобы устранить проблему, о которой вы говорите, был создан стандарт PSR-4 , в котором определены рекомендации по привязке пространств имен к файлам файловой системы.

В данном конкретном случае этоОтображение PSR-4 поддерживается автоматически Composer .Пакет Illuminate должен иметь composer.json, который сообщает Composer, где он может найти файлы для пространства имен Illuminate.Когда вы запускаете composer install, Composer просматривает все зависимые файлы composer.json и строит vendor/autoload.php из всех этих зависимостей.Поэтому все, что вам нужно сделать, это включить vendor/autoload.php, и вы волшебным образом получите доступ ко всему, что есть в вашем списке зависимостей.

...