Импорт файлов в Yii2
Импорт файлов в Yii2
Как в Yii2 делать импорт файлов? Интересует как делать импорт файлов:
а) в конфиге, чтобы эти файлы были доступны в веб-приложении везде
б) в любом другом месте, например, в контроллере. В Yii1 это делалось с помощью Yii::import()
а) в конфиге, чтобы эти файлы были доступны в веб-приложении везде
б) в любом другом месте, например, в контроллере. В Yii1 это делалось с помощью Yii::import()
Re: Импорт файлов в Yii2
1) Для любого компонента в конфиге доступен параметр 'class' в котором достаточно прописать полный нэймспэйс нужного класса. После этого класс можно юзать в любом месте приложения через Yii::$app->myComponent;
2) Так как Yii2 полностью написан на нэймспэйсах, то для загрузки любого файла, достаточно просто прописать use my\namespace\MyClass; и использовать данный класс по имени $var = new MyClass; в контроллере или в любом другом файле.
2) Так как Yii2 полностью написан на нэймспэйсах, то для загрузки любого файла, достаточно просто прописать use my\namespace\MyClass; и использовать данный класс по имени $var = new MyClass; в контроллере или в любом другом файле.
Re: Импорт файлов в Yii2
Спасибо за ответ.
Re: Импорт файлов в Yii2
Код: Выделить всё
/** @see YiiBase::setAlias(); */
Re: Импорт файлов в Yii2
Несовсем понятный ответ на вышезаданый вопрос. Ранее в YII1 в параметре import конфигурационного файла мы указывали алиас который указывал на расположение импортируемых файлов. Как??? параметр 'class' в котором мы прописываем полный нэймспэйс нужного класса может указать на расположение самого файла с классом ведь неймспейс ето всего лишь часть имени класса.
Re: Импорт файлов в Yii2
Как искался раньше по алиасу 'application.components.service.MyClass', так и ищется теперь по имени класса с неймспейсом app\components\service\MyClass.Yehor писал(а):Как??? параметр 'class' в котором мы прописываем полный нэймспэйс нужного класса может указать на расположение самого файла с классом ведь неймспейс ето всего лишь часть имени класса.
У корневой папки сайта базовый неймспейс app. У каждого компонента в папке vendor - свой. Остальной путь неймспейса совпадает с папками. Так что если вписали
Код: Выделить всё
$object = new \app\components\service\MyClass();
Код: Выделить всё
use app\components\service\MyClass;
$object = new MyClass();
Re: Импорт файлов в Yii2
это все конечно здорово, но как быть если надо использовать сторонний плагин, который написан не на namespace ?
переписывать тонны кода то еще извращение
переписывать тонны кода то еще извращение
Re: Импорт файлов в Yii2
Working with Third-Party Codeishpanec писал(а):это все конечно здорово, но как быть если надо использовать сторонний плагин, который написан не на namespace ?
переписывать тонны кода то еще извращение
Re: Импорт файлов в Yii2
я правильно понимаю, что мне надо использовать вот этоDeaTh писал(а):Working with Third-Party Code
Код: Выделить всё
Yii::$classMap['Class1'] = 'path/to/Class1.php';
Yii::$classMap['Class2'] = 'path/to/Class2.php';
Код: Выделить всё
require(__DIR__ . '/my/vendor/yiisoft/yii2/Yii.php');
Re: Импорт файлов в Yii2
все разобрался, для этого надо в index.php (или где удобнее) подключить свой класс который не имеет namespace
затем нужно выйти из пространства имен и где надо (например в action) использовать свой класс
слеш перед \Class1() - обязательно! это и есть выход из пространства имен.
Код: Выделить всё
Yii::$classMap['Class1'] = 'path/to/Class1.php';
Код: Выделить всё
$myClass1 = new \Class1();
Re: Импорт файлов в Yii2
Это есть глобальное пространство именishpanec писал(а): это и есть выход из пространства имен.
Re: Импорт файлов в Yii2
ну да, забыл слово "текущее" (пространство имен)Onotole писал(а):Это есть глобальное пространство имен
Re: Импорт файлов в Yii2
Всем привет!
1. Правильно ли понял, что если у меня сотня моделей, то их все нужно каждый раз подключать вот так?
То есть былого раздела import
в конфиге yii2 нет?
2. При динамическом задании имени класса автозагрузка не работает. Это норма? Как с сим работать?
Например есть файл Helper.php
Вызов
падает с ошибкой Class 'Region' not found.
Если new $modelName() заменить на жестко прописанное new Region(), всё работает нормально.
Помогите, пожалуйста!
И конечно, всех с праздниками - пучть в новом году все запускается, мёрджится и отрабатывает как по маслу!
1. Правильно ли понял, что если у меня сотня моделей, то их все нужно каждый раз подключать вот так?
Код: Выделить всё
use common\models\Country;
use common\models\City;
...
Код: Выделить всё
'import' => array(
'application.models.*',)
2. При динамическом задании имени класса автозагрузка не работает. Это норма? Как с сим работать?
Например есть файл Helper.php
Код: Выделить всё
namespace common\components;
use common\models\Region;
class Helper
{
...
public static function getArray($modelName)
{
$model = new $modelName();
...
}
}
Код: Выделить всё
use common\models\Region;
Helper::getArray('Region');
падает с ошибкой Class 'Region' not found.
Если new $modelName() заменить на жестко прописанное new Region(), всё работает нормально.
Помогите, пожалуйста!
И конечно, всех с праздниками - пучть в новом году все запускается, мёрджится и отрабатывает как по маслу!
Re: Импорт файлов в Yii2
На оба вопроса ответ один.
Это неймспейсы (пространства имен).
Во втором случае необходимо указать полное имя класса включая пространство имен: common\components\Helper
Это неймспейсы (пространства имен).
Во втором случае необходимо указать полное имя класса включая пространство имен: common\components\Helper
Re: Импорт файлов в Yii2
Onotole, спасибо за ответ, но вопрос не о том "что это за слеши в названии классов", хех
1. Вопрос о том, как не писать "use Html" в каждом из множества view-файлов! Наверняка это можно сделать 1 раз где-то, неужели нет?
2. Оказалось, для этого есть метод !
1. Вопрос о том, как не писать "use Html" в каждом из множества view-файлов! Наверняка это можно сделать 1 раз где-то, неужели нет?
2. Оказалось, для этого есть метод
Код: Выделить всё
Yii::createObject($className)
Re: Импорт файлов в Yii2
Выбросить Блокнот и поставить любую нормальную IDE.yakoval писал(а):1. Вопрос о том, как не писать "use Html" в каждом из множества view-файлов! Наверняка это можно сделать 1 раз где-то, неужели нет?
Это для другого.yakoval писал(а):2. Оказалось, для этого есть метод createObject($className)
Re: Импорт файлов в Yii2
дело в том, что пять (где вы были эти пять лет?) назад в php введены неймспейсы, и вся работа с классами ведется на основе их ПОЛНОГО (с неймспейсом) имени. Как с ними работать вы можете узнать из документации (google => php namespaces). Форум не место обучения по справочным вопросам.yakoval писал(а):Onotole, спасибо за ответ, но вопрос не о том "что это за слеши в названии классов", хех
1. Вопрос о том, как не писать "use Html" в каждом из множества view-файлов! Наверняка это можно сделать 1 раз где-то, неужели нет?
2. Оказалось, для этого есть метод!Код: Выделить всё
Yii::createObject($className)
Re: Импорт файлов в Yii2
Но IDE не влияет на интерпритацию кода?ElisDN писал(а):Выбросить Блокнот и поставить любую нормальную IDE.yakoval писал(а):1. Вопрос о том, как не писать "use Html" в каждом из множества view-файлов! Наверняка это можно сделать 1 раз где-то, неужели нет?
Если имеете ввиду подсветку синтаксиса, то вопрос не о ней, разумеется. Похоже, не понял Вас.
Но он же ищет класс в контейнере имём, где можно описать необходимое соответствие (напр., 'Region' к 'common\models\Region') специально для динамических указаний имён создаваемых классов.ElisDN писал(а):Это для другого.yakoval писал(а):2. Оказалось, для этого есть метод createObject($className)
Работал с внутрикорпоративными фреймворками, в которых воплощено описанное мною выше оперирование с namespaces (на вопрос "как" ответить не могу - ушёл с этого места).zelenin писал(а):дело в том, что пять (где вы были эти пять лет?) назад в php введены неймспейсы, и вся работа с классами ведется на основе их ПОЛНОГО (с неймспейсом) имени. Как с ними работать вы можете узнать из документации (google => php namespaces). Форум не место обучения по справочным вопросам.yakoval писал(а):Onotole, спасибо за ответ, но вопрос не о том "что это за слеши в названии классов", хех
1. Вопрос о том, как не писать "use Html" в каждом из множества view-файлов! Наверняка это можно сделать 1 раз где-то, неужели нет?
2. Оказалось, для этого есть метод!Код: Выделить всё
Yii::createObject($className)
А вот с переходом на Yii2 запоздал.
Re: Импорт файлов в Yii2
IDE автоматически ставит use, чтобы не прописывать их вручную.yakoval писал(а):Но IDE не влияет на интерпритацию кода?
Можно и без соответствия обойтись:yakoval писал(а):где можно описать необходимое соответствие (напр., 'Region' к 'common\models\Region') специально для динамических указаний имён создаваемых классов
Код: Выделить всё
Helper::getArray('\common\models\Region');
Re: Импорт файлов в Yii2
Ого, а в PHPStorm есть такой дивный помощник? Не смог найти. Правда, использую 5 версию.ElisDN писал(а):IDE автоматически ставит use, чтобы не прописывать их вручную.
Вот тут хочется именно динамической передачи типа объекта в метод в виде "Region" (без пространства имён, которое можно принять одинаковым в рамках этого метода). Хотя, хм, можно попробоватьElisDN писал(а): Можно и без соответствия обойтись:Код: Выделить всё
Helper::getArray('\common\models\Region');
Код: Выделить всё
'\common\models\' . $className
Не блестяще, но уже что-то. Спасибо за наводку.