Clase ActiveRecord

edited enero 2008 in Principiantes
Hola, compañeros.

Tengo un problema al subir parte de la aplicación al servidor. concretamente un método del controlador web que realiza lo siguiente:
function inicio($modo){
	
	$this->noticias_portada = $this->WNoticia->find("conditions: portada_sn = 'S'" ,  'order: fecha' );
	
	if (!isset($modo))
		$this->set_response('view');
		
}

La excepción que me da el server es : "No existe el m?todo '__sleep' en ActiveRecord::w_noticia" (podéis verlo en "www.orquestaanagrama.es/ang").

El modelo w_noticia.php es el siguiente:
class WNoticia extends ActiveRecord {
				
}

He probado a utilizar un controlador que hereda de StandardForm y ahí el modelo me funciona correctamente. ¿Alguien sabe si el problema se debe a la versión de php5 o alguna opción del servidor?

Muchas gracias de antemano

Comentarios

  • edited 7:45
    Hola de nuevo compañeros.

    Según dice la documentación de php (<!-- m --><a class="postlink" href="http://es2.php.net/manual/es/function.serialize.php">http://es2.php.net/manual/es/function.serialize.php</a><!-- m -->) durate la serialización de un objeto php ocurre lo siguiente:
    Cuando seria objetos, PHP intentará llamar la función miembro __sleep() antes de la seriación. Esto permite que el objeto efectúe limpiezas de último minuto, etc. antes de ser seriado.

    El problema es que la clase ActiveRecord no contiene dicho método. Por tanto lo añadido para solucionar el problema:
    /*
    	 * Cuando se serializa un objeto se llama al método __sleep
    	 */
    	public function __sleep&#40;&#41;&#123;
    		return 0;
    	&#125;
    

    NOTA: Lo que todavía sigo sin tener claro es cual es la diferencia entre el servidor y mi localhost. Quizá sea la versión de php.

    Un saludo compañeros, espero que las trifulcas que voy posteando, aunque no haya podido ayudarme nadie sirvan a otros a pasar por alto el fango en el que yo me he metido. Hasta pronto.
  • edited 7:45
    creo que los herrores que tienes es debido a algunas convenciones que estas usando mal. por ejm:
    function inicio&#40;$modo&#41;&#123; 
        
       $this-&gt;noticias_portada = $this-&gt;WNoticia-&gt;find&#40;&quot;conditions&#58; portada_sn = 'S'&quot; ,  'order&#58; fecha' &#41;; 
        
       if &#40;!isset&#40;$modo&#41;&#41; 
          $this-&gt;set_response&#40;'view'&#41;; 
           
    &#125;
    
    deberia ser asi:
    function inicio&#40;$id&#41;&#123; 
        
       $this-&gt;noticias_portada = $this-&gt;WNoticia-&gt;find&#40;&quot;conditions&#58; portada_sn = 'S'&quot; ,  'order&#58; fecha' &#41;; 
        
       if &#40;!isset&#40;$id&#41;&#41; 
          $this-&gt;set_response&#40;'view'&#41;; 
           
    &#125;
    

    Si quieres que el valor "1" que envias este definido, porque por lo que veo $modo, no esta definido en ningun lugar.
    Por el poco codigo que muestras tb observe que el nombre de tu modelo no concuerda con el de tu tabla, tu le agregaste un '_' demas, es decir el nombre del modelo debe ser igual al de la tabla, pero todo escrito en minusculas. Bueno esto es todo en cuanto a la informacion que nos das. si sigues teniendo problemas, brindanos mas informacion de LO QUE TU QUIERES QUE HAGA Y EL COMO.para asi poder ayudarte mejor, y bueno algo de codigo siempre ayuda a comprender mas los problemas.
    saludos
  • edited 7:45
    Hola Irraco, gracias por tu interés.

    Respecto al cambio que propones del nombre del parámetro ($id), no entiendo cual es el motivo. El parámetro modo, sólamente lo estoy utilizando para diferenciar cuando la llamada a ese método se realiza mediante una petición ajax "inicio()" o por la redirección desde otro método inicio(1). Estoy seguro que hay alguna otra solución pero es la primera que tomé. Estoy abierto a sugerencias.

    Respecto a la diferencia de nombre de modelo con el fichero php, decidí utilizar _ porque me parece más claro de leer (quizá poque estoy acostumbrado así) y me encontré con que no podía llamar a la clase W_noticia porque provocaba un error, en cambio llamándola WNoticia funcionaba.

    Y volviendo al mensaje que posteé como solución. ¿Estás al tanto si la llamada al método ___sleep depende de la versión de php?

    Muchas gracias por tu ayuda.Hasta pronto.
  • edited 7:45
    hasta donde tengo entendido es funcional en cualquier version perteneciente a la 5, pero no deberias complicarte tanto con los nombres, como dices tu es tu costumbre, pero como te digo no te compliques la vida si sabes que de cierta manera no ocasionara problemas, es mejor asi.

    saludos
Sign In or Register to comment.