Foros del Web » Programando para Internet » PHP »

PHP OO Modularizacion del Proyecto

Estas en el tema de Modularizacion del Proyecto en el foro de PHP en Foros del Web. hola como estan, estoy iniciando en el framework zend, modularice mi proyecto en tres modulos admin, default y user, por favor ayudenme una vez autentificado ...
  #1 (permalink)  
Antiguo 04/10/2010, 06:33
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Modularizacion del Proyecto

hola como estan, estoy iniciando en el framework zend, modularice mi proyecto en tres modulos admin, default y user, por favor ayudenme una vez autentificado como puedo ir al otro modulo en este caso modulo user y habilitar el layout para ese modulo mi codigo es el siguinete, por favor ayudenme

modules/controller/autentificacionController

public function loginAction() {

$this->view->title = 'Login';
if(Zend_Auth::getInstance()->hasIdentity()){
$this->_redirect('autentificacion/login');
}

$request = $this->getRequest();
$form = new Form_Login();
if($request->isPost()){
if($form->isValid($this->_request->getPost())){
$authAdapter = $this->getAuthAdapter();

$login_usr = $form->getValue('login_usr');
$password_usr = $form->getValue('password_usr');
print_r($form->getValues());
$authAdapter->setIdentity($login_usr)
->setCredential($password_usr);

$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);

if($result->isValid()){
$identity = $authAdapter->getResultRowObject();

$authStorage = $auth->getStorage();
$authStorage->write($identity);
$fron_cotroller = Zend_Controller_Front::getInstance();
$fron_cotroller->addModuleDirectory('/modularizacion/modules/user');
$fron_cotroller->addControllerDirectory('/modularizacion/modules/user/controller','user');

// como redireccionar a otro modulo
} else {
$this->view->errorMessage = "User name or password is wrong.";
}
}
}


$this->view->form = $form;

}
como redireccionar a otro modulo
  #2 (permalink)  
Antiguo 04/10/2010, 08:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Modularizacion del Proyecto

Puedes usar el helper redirect para eso:
Código PHP:
Ver original
  1. $this->_helper->Redirector->gotoSimple($action, $controller, $module, $params);

Para poder redirigir con más control.

Saludos.
  #3 (permalink)  
Antiguo 04/10/2010, 21:14
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Modularizacion del Proyecto

Muchas gracias GatorV, funciono pude ir a otro modulo, ya no es necesario utilizar los siguiente:
$fron_cotroller = Zend_Controller_Front::getInstance();
$fron_cotroller->addModuleDirectory('/modularizacion/modules/user');
$fron_cotroller->addControllerDirectory('/modularizacion/modules/user/controller','user');
para redireccionar. cual es la diferencia si utilizo forward() para redireccionar

Última edición por jcq_quiroz; 04/10/2010 a las 21:24
  #4 (permalink)  
Antiguo 04/10/2010, 21:26
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Modularizacion del Proyecto

una consulta se tiene que sobre escribir Zend_Application_Module_Autoloader, en el bootstrap de cada modulo, el bootstrap de modulo user es el siguiente:
<?php

class User_Bootstrap extends Zend_Application_Module_Bootstrap
{

protected function _initAutoLoad() {
$modelLoader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'user',
'basePath' => APPLICATION_PATH . '/modules/user'));

return $modelLoader;
}
function _initViewHelpers() {
$this->_helper->layout->setLayout('layoutp');


$view->setHelperPath(APPLICATION_PATH . '/helpers', '');

$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv('Content-type', 'text/html;charset=utf-8')
->appendName('description', 'Using view helpers in Zend_view');

$view->headTitle()->setSeparator(' - ')
->headTitle('Principal');
$this->view->title = "Sistema";

}
}

pero la asignacion de otro layout, $this->_helper->layout->setLayout('layoutp'); me esta dando el siguiente error, el layouts esta en /application/layouts/scripts/layoutp.phtml

Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Unable to resolve plugin "layouts"; no corresponding plugin with that name' in C:\xampp\php\PEAR\Zend\Application\Bootstrap\Boots trapAbstract.php:330 Stack trace: #0 C:\xampp\php\PEAR\Zend\Application\Bootstrap\Boots trapAbstract.php(379): Zend_Application_Bootstrap_BootstrapAbstract->getPluginResource('layouts') #1 C:\xampp\php\PEAR\Zend\Application\Bootstrap\Boots trapAbstract.php(391): Zend_Application_Bootstrap_BootstrapAbstract->getPluginResources() #2 C:\xampp\php\PEAR\Zend\Application\Bootstrap\Boots trapAbstract.php(618): Zend_Application_Bootstrap_BootstrapAbstract->getPluginResourceNames() #3 C:\xampp\php\PEAR\Zend\Application\Bootstrap\Boots trapAbstract.php(579): Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap(NULL) #4 C:\xampp\php\PEAR\Zend\Application.php(347): Zend_Application_Bootstrap_BootstrapAbstract->bootstrap(NULL) #5 C:\xampp\htdocs\modularizacion\public\index.php(28 ): Zend_Application->bootstrap() #6 {main} t in C:\xampp\php\PEAR\Zend\Application\Bootstrap\Boots trapAbstract.php on line 330

como puedo asignar otro layout para ese modulo? por favor ayudenme les estare agradecido gracias.
  #5 (permalink)  
Antiguo 04/10/2010, 22:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Modularizacion del Proyecto

Para eso debes de obtener la instancia de Zend_Layout usando Zend_Layout::getMvcInstance() y así puedes poner el layout.

No es necesario iniciar un module autoloader por cada bootstrap, Zend registra uno por ti.

Saludos.
  #6 (permalink)  
Antiguo 05/10/2010, 15:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Modularizacion del Proyecto

disculpen si les sigo molestando mi pregunta es la siguiente puedo asignmar Layout para cada modulo en el bootStrap de cada modulo de la siguinete manera:
/application/modules/user/Bootstrap.php
function _initViewHelpers() {
$layout = Zend_Layout::getMvcInstance();
$layout->setLayout('layout');
$view = $layout->getView();
$view->setHelperPath(APPLICATION_PATH . '/helpers', '');
$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv('Content-type', 'text/html;charset=utf-8')
->appendName('description', 'Using view helpers in Zend_view');
$view->headTitle()->setSeparator(' - ')
->headTitle('Prionciupal -Default');


}
y en el Bootstrap principal la configuracion para layout es el siguiente
/application/bootstrap.php
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$view->setHelperPath(APPLICATION_PATH . '/helpers', '');
$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv('Content-type', 'text/html;charset=utf-8')
->appendName('description', 'Using view helpers in Zend_view');

$view->headTitle()->setSeparator(' - ')
->headTitle('Principal');
pero cuando ejecuo mi programa solo muestra el layout del modulo users, como puedo hacer para que solo me muestre en ese modulo, o que muestre layout para cada modulo, nose que estoy haciendo mal ayudenme por favor les estare agradecido
  #7 (permalink)  
Antiguo 05/10/2010, 15:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Modularizacion del Proyecto

No, para hacer eso tienes que usar un Controller Plugin, revisa en el foro hay muchos ejemplos / aportes para hacer lo que pides.

Saludos.
  #8 (permalink)  
Antiguo 05/10/2010, 23:09
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Modularizacion del Proyecto

por favor ayudenme este es mi script para diferentes layouts
Código PHP:
//application/default/plugins/Layout.php
<?php class Plugin_Layout extends Zend_Controller_plugin_Abstract{

    public function 
preDispatch(Zend_Controller_Request_Abstract $request){

       
$config Zend_Controller_Front::getInstance()->getParam('bootstrap')->getOptions();
       
print_r($config);
    
$moduleName $request->getModuleName();
        echo 
'nombre modulo:  '.$moduleName.'<br>';
        
/*if (isset($config[$module]['resources']['layout']['layout'])) {
            $layoutScript = $config[$module]['resources']['layout']['layout'];
            print_r($layoutScript);
            $this->getActionController()
                 ->getHelper('layout')
                 ->setLayout($layoutScript);
        } */
        
if (isset($config[$moduleName]['resources']['layout']['layout'])) {

                echo 
'en el if '
            
$layoutScript $config[$moduleName]['resources']['layout']['layout'];
                
Zend_Layout::getMvcInstance()->setLayout($layoutScript);
                
print_r($layoutScript);
        }

        if (isset(
$config[$moduleName]['resources']['layout']['layoutPath'])) {

              
$layoutPath $config[$moduleName]['resources']['layout']['layoutPath'];
              
$moduleDir Zend_Controller_Front::getInstance()->getModuleDirectory();

              
Zend_Layout::getMvcInstance()->setLayoutPath($layoutPath);
        }

    }
}
?>
y este el la llamada del plugin en el bootstrap
Código PHP:
<?php

class User_Bootstrap extends Zend_Application_Module_Bootstrap
{

    protected function 
_initAutoLoad() {
        
$modelLoader = new Zend_Application_Module_Autoloader(array(
                    
'namespace' => 'user',
                    
'basePath' => APPLICATION_PATH '/modules/user'));
   
        return 
$modelLoader;
    }

    protected function 
_initPlugins(){
        
$this->bootstrap('frontController');

        
$plugin = new Plugin_Layout();
        
$this->frontController->registerPlugin($plugin);
    }
cuando quiero autentificarme o hacer alguna oprecaion me da el siguiente error:


Fatal error: Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in C:\xampp\htdocs\modularizacion\application\modules \default\plugins\Layout.php, line 2' in C:\xampp\php\PEAR\Zend\Controller\Response\Abstrac t.php:282 Stack trace: #0 C:\xampp\php\PEAR\Zend\Controller\Response\Abstrac t.php(300): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 C:\xampp\php\PEAR\Zend\Controller\Response\Abstrac t.php(727): Zend_Controller_Response_Abstract->sendHeaders() #2 C:\xampp\php\PEAR\Zend\Controller\Front.php(984): Zend_Controller_Response_Abstract->sendResponse() #3 C:\xampp\php\PEAR\Zend\Application\Bootstrap\Boots trap.php(77): Zend_Controller_Front->dispatch() #4 C:\xampp\php\PEAR\Zend\Application.php(358): Zend_Application_Bootstrap_Bootstrap->run() #5 C:\xampp\htdocs\modularizacion\public\index.php(26 ): Zend_Application->run() #6 {main} thrown in C:\xampp\php\PEAR\Zend\Controller\Response\Abstrac t.php on line 282


que estoy haciendo mal ayudenme,les esare agradecidos
  #9 (permalink)  
Antiguo 06/10/2010, 08:25
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Modularizacion del Proyecto

Extraigo el error del mismo mensaje de la excepcion:

Cannot send headers; headers already sent in C:\xampp\htdocs\modularizacion\application\modules \default\plugins\Layout.php, line 2
__________________
I see dead pixels
  #10 (permalink)  
Antiguo 06/10/2010, 08:29
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Modularizacion del Proyecto

y como puedo extraer ese error y una vez extraido el error va funcionar correctamente, porfavor ayudame a extraer ese error gracias
  #11 (permalink)  
Antiguo 06/10/2010, 08:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Modularizacion del Proyecto

Pues el error es simple, ve a la línea 2 de Layout.php y omite la salida de texto.

Saludos.

Etiquetas: proyectos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:33.