2011-01-11 3 views
0

Ich arbeite mit Zend und Doctrine2 und ich musste einige Cronjobs mit der gleichen Struktur erstellen. Das Problem ist, wenn ich versuchte, das Repository von einem Model mit Beziehung zu einem anderen Model zu bekommen, bekam ich einen Fehler (nur in der Befehlszeile, in der Website funktioniert gut, wenn ich das gleiche mache).Zend & Doctrine2: Fehler mit Proxies von Kommandozeilen-Skripten

Dies ist der Fehler, den ich in der Befehlszeile erhalten:

Fatal error: Class 'Proxy \ Model_MediaPresetsProxy' nicht in c gefunden: \ php \ library \ Lehre \ ORM \ Proxy \ ProxyFactory.php auf 92 Linie

ich habe die Proxys in diesem Ordner /application/models/Proxies/ und die Datei Model_MediaPresetsProxy in diesem Verzeichnis

<?php 

namespace Proxy; 

/** 
* THIS CLASS WAS GENERATED BY THE DOCTRINE ORM. DO NOT EDIT THIS FILE. 
*/ 
class Model_MediaPresetsProxy extends \Model_MediaPresets implements \Doctrine\ORM\Proxy\Proxy 
{ 
[...] 

Hier ist das, was Ich habe für die crons

/crons/init.php

<?php 

$time = microtime(true); 
$memory = memory_get_usage(); 

// Define path to application directory 
defined('APPLICATION_PATH') 
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); 

// Define application environment 
defined('APPLICATION_ENV') 
    || define('APPLICATION_ENV', 'cldev'); 

// Ensure library/ is on include_path 
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'), 
    get_include_path(), 
))); 

defined('NL') 
    || define('NL', "\n"); 

/** Zend_Application */ 
require_once 'Zend/Application.php'; 

// Create application, bootstrap, and run 
$application = new Zend_Application(
    APPLICATION_ENV, 
    APPLICATION_PATH . '/configs/application.ini' 
); 
$application->bootstrap(); 

// set bootstrap param 
$bootstrap = $application->getBootstrap(); 
$front = $bootstrap->getResource('FrontController'); 
$front->setParam('bootstrap', $bootstrap); 

register_shutdown_function('__shutdown'); 

function __shutdown() 
{ 
    global $time, $memory; 
    $endTime = microtime(true); 
    $endMemory = memory_get_usage(); 

    echo ' 
    Time [' . ($endTime - $time) . '] Memory [' . number_format(($endMemory - $memory)/1024) . 'Kb] 
'; 
} 

und dann habe ich meine cronjob, dass alles zu testen, arbeitete

/crons/queue/Process. php

<?php 

require realpath(dirname(__FILE__) . '/../init.php'); 


$paths = Helper_Media::getPaths(); 
$magick = new App_PhMagick(); 

$em = Zend_Registry::getInstance()->entityManager; 

$queue = $em->getRepository('Model_MediaQueue')->findAll(); 

echo 'Items in the queue: ' . count($queue) . NL; 

Und dies sind die Modelle, die ich für diese

bin mit

/application/models/MediaQueue.php

<?php 

use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @Entity 
* @Table(name="media_queue") 
*/ 
class Model_MediaQueue 
{ 
    /** 
    * @Id @Column(type="integer") 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    private $queue_id; 


    /** 
    * @ManyToOne(targetEntity="Model_MediaPresets") 
    * @JoinColumn(name="queue_preset_id", referencedColumnName="preset_id") 
    */ 
    private $media_preset; 

    /** 
    * @ManyToOne(targetEntity="Model_Sites", inversedBy="media_list") 
    * @JoinColumn(name="queue_site_id", referencedColumnName="site_id") 
    */ 
    private $media_site; 

    /** 
    * @Column(type="string") 
    */ 
    private $source_media_file; 

    /** @Column(type="integer") */ 
    private $result_media_id; 

    /** @Column(type="integer") */ 
    private $queue_status; 

    /** @Column(type="integer") */ 
    private $queue_added; 

    /** @Column(type="integer") */ 
    private $queue_processed; 


    public function __construct() 
    { 
     $this->media_preset = new \Doctrine\Common\Collections\ArrayCollection(); 
     $this->media_site = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    [...] 
} 

/application/models/MediaPresets.php

<?php 

/** 
* @Entity 
* @Table(name="media_presets") 
*/ 
class Model_MediaPresets 
{ 
    /** 
    * @Id @Column(type="integer") 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    private $preset_id; 

    /** 
    * @Column(name="preset_type", type="string", columnDefinition="enum('video', 'photo')") 
    */ 
    private $preset_type; 

    /** @Column(type="string") */ 
    private $preset_name; 

    /** @Column(type="string") */ 
    private $preset_formats_order; 

    /** @Column(type="integer") */ 
    private $preset_size_w; 

    /** @Column(type="integer") */ 
    private $preset_size_h; 

    /** 
    * @Column(name="preset_resize_method", type="string", columnDefinition="enum('Maintain', 'Stretch', 'Centre', 'Abort')") 
    */ 
    private $preset_resize_method; 

    /** @Column(type="string") */ 
    private $preset_watermark; 

    /** @Column(type="string") */ 
    private $preset_background; 

} 

irgendwelche Hinweise?

Vielen Dank :)

+0

In Model_MediaQueue importieren Sie ArrayCollection, aber immer noch die FQN im Konstruktor: P – Cobby

+0

hehe .. Danke .. das war mein erstes Modell und ich habe nicht bemerkt, dass die Linie immer noch da war.:) – SERPRO

Antwort

0

Nun nach einer Weile habe ich mir die Lösung gefunden.

Das Problem war, dass ich zwei verschiedene Umgebungen geschaffen: DEVELOPMENT und CLDEV (Die Kommandozeilenentwicklung)

und meine getEntityManager() Funktion hatte eine Linie mit

[...] 
$config->setAutoGenerateProxyClasses((APPLICATION_ENV == 'development')); 
[...] 

Also ich Ersetzt es mit

[...] 
$config->setAutoGenerateProxyClasses((APPLICATION_ENV == 'development' || APPLICATION_ENV == 'cldev')); 
[...] 

und das Problem ist gelöst. Ich hoffe, es wird anderen in der Zukunft helfen.

+0

Du könntest diese Antwort als 'richtig' markieren :) – chelmertz

+0

danke @chelmertz Ich konnte es vorher nicht machen .. :) – SERPRO