Doctrine2: генерация прокси-классов

nKognito

Новичок
Всем доброго времени суток.
Никак не могу понять одну вещь. Если я использую этот фреймворк как stand-alone библиотеку, то есть просто копирую все исходники в папку на сервере и потом с помощью include'а загружаю, то каким образом я могу сгенерировать прокси-классы? Хостинг вритуальный, ни PEAR ничего другого не позволяет поставить..
Заранее спасибо!
 

hell0w0rd

Продвинутый новичок
Для начала освойте composer. Далее спокойно разрабатывайте как вам удобно на локалке, а заливайте архивом сразу с зависимостями.
А вообще:
PHP:
$config->setAutoGenerateProxyClasses($bool);
 

Absinthe

жожо
Я думаю, что единственно-правильным решением будет смена хостинга.
Данную проблему можно решить, но постоянно будут возникать новые.
До тех пор, пока ты не купишь платный VDS хотя бы за 5 баксов в месяц.
 

fixxxer

К.О.
Партнер клуба
Безотносительно вопроса о непригодности шаред-хостинга, хочу заметить, что эта задача должна решаться при подготовке к деплою, а не после него.
 
  • Like
Реакции: Gas

nKognito

Новичок
Для начала освойте composer. Далее спокойно разрабатывайте как вам удобно на локалке, а заливайте архивом сразу с зависимостями.
А вообще:
PHP:
$config->setAutoGenerateProxyClasses($bool);
Да вот дело в том, что если выствляю эту директиву, то систематически сайт падает со страшной ошибкой о невозможности найти тот или иной класс и ссылается на прокси-классы.. Причем минут 10-15 работает наормально, а потом начинается.. вот и думал может изначально сгенерить...
 

nKognito

Новичок
Я думаю, что единственно-правильным решением будет смена хостинга.
Данную проблему можно решить, но постоянно будут возникать новые.
До тех пор, пока ты не купишь платный VDS хотя бы за 5 баксов в месяц.
Ну и собственно как ее решить инетерсно знать)
 

hell0w0rd

Продвинутый новичок
nKognito, а я вам говорю - так делать плохо. Используйте composer, на локалке пользуйтесь консольной утилитой, заливайте на хостинг уже прогретый кеш. А вообще вы не показали ни одной ошибки, о чем еще говорить? Автолоадинг классов у вас для неймспейса прокси-классов подключен?
 

nKognito

Новичок
nKognito, а я вам говорю - так делать плохо. Используйте composer, на локалке пользуйтесь консольной утилитой, заливайте на хостинг уже прогретый кеш. А вообще вы не показали ни одной ошибки, о чем еще говорить? Автолоадинг классов у вас для неймспейса прокси-классов подключен?
Код:
ini_set('include_path', ROOT_PATH.'/includes');
require_once(ROOT_PATH.'/includes/Doctrine/ORM/Tools/Setup.php');
Doctrine\ORM\Tools\Setup::registerAutoloadPEAR();

use Doctrine\ORM\Tools\Setup,
  Doctrine\ORM\EntityManager,
  Doctrine\ORM\Configuration,
  Doctrine\DBAL\Event\Listeners\MysqlSessionInit;

$classLoader = new \Doctrine\Common\ClassLoader('Entities', ROOT_PATH.'/includes/Objects');
$classLoader->register();

$classLoader = new \Doctrine\Common\ClassLoader('Proxies', ROOT_PATH.'/includes/Proxies');
$classLoader->register();

$cache = new \Doctrine\Common\Cache\ApcCache;
$config = new Configuration;
$config->setMetadataCacheImpl($cache);
$driverImpl = $config->newDefaultAnnotationDriver(ROOT_PATH.'/includes/Objects');
$driverImpl->getAllClassNames();
$config->setMetadataDriverImpl($driverImpl);
$config->setQueryCacheImpl($cache);
$config->setProxyDir(ROOT_PATH.'/includes/Proxies');
$config->setProxyNamespace('Project\Proxies');
$config->setAutoGenerateProxyClasses(true);
//$config->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger());

$em = EntityManager::create(array(
  'driver' => 'pdo_mysql',
  'unix_socket' => '/var/lib/mysql/mysql.sock',
  'charset' => 'utf8',
  'host' => DB_HOST,
  'user' => DB_USER,
  'password' => DB_PASS,
  'dbname' => DB_NAME
  ), $config);
$em->getEventManager()->addEventSubscriber(new MysqlSessionInit('utf8', 'utf8_unicode_ci'));
Вот таким макаром подключаю ORM, если отключаю автогенерацию классов, вылетает такая ошибка:
Код:
Warning: require(/home/xxx/xxx.ru/www/includes/Proxies/__CG__TestEntityCourseCategory.php) [function.require]: failed to open stream: No such file or directory in /home/xxx/xxx.ru/www/includes/Doctrine/ORM/Proxy/ProxyFactory.php on line 92

Fatal error: require() [function.require]: Failed opening required '/home/xxx/xxx.ru/www/includes/Proxies/__CG__TestEntityCourseCategory.php' (include_path='/home/xxx/xxx.ru/www/includes') in /home/xxx/xxx.ru/www/includes/Doctrine/ORM/Proxy/ProxyFactory.php on line 92
Смысл ошибки ясен, прокси-класс не находит, вот вопрос почему он не сгенерился когда опция была включена...

А какой консольной утилитой можно локально сгенерить прокси?
 
Сверху