Back to top

Autore Topic: chirimenti MVC  (Letto 699 volte)

Offline memma1989

  • Nuovo arrivato
  • *
  • Post: 15
    • Mostra profilo
chirimenti MVC
« il: 27 Mag 2016, 11:37:17 »
Buongiorno a tutti,


sto sviluppando una componente cercando di mettere in atto l'MVC.


Il mio problema è il seguente sostanzialmente:
non riesco a capire chi chiama chi. Mi spiego meglio: da quanto ho capito è il controller che fa in modo di coordinare model e view.
La mia componente è semplicemente un manager di una serie di dati, quindi deve essere in grado di aggiungere dati al database e di recuperarli per visualizzarli. Per cui, in sostanza, mi ritrovo a dover affrontare due casi:
1. Caso in cui voglio semplicemente visualizzare i dati (quindi quello che farò sarà fare una chiamata al DB per recuperare i dati e poi li visualizzerò tramite la view)
2. Caso in cui voglio aggiungere un dato al database e poi visualizzare tutti i dati nel DB, incluso l'ultimo appena inserito (quindi quello che farò sarà aggiungere il dato al DB e poi recuperare tutti i dati e visualizzarli tramite la view)
Dunque quello di cui ho bisogno io sono due model diversi (quello che aggiunge i dati e quello che li recupera) e la medesima view (quella che uso sia se devo semplicemente visualizzare i dati e quella che uso per visualizzare i dati però arrivando da un model che mi ha appena aggiunto un dato); quindi avrò una view e due model.


Dunque il io codice è il seguente:


controller.php
Codice: [Seleziona]
<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
/**
 * Hello World Component Controller
 *
 * @since  0.0.1
 */
class SensorsManagerController extends JControllerLegacy{
    
/* Default view */
    
public function display($cachable false$urlparams = Array()){
        
/*$view = $this->getView('SensorsManager', 'html' );

        $model = $this->getModel('SensorsManager');

        $view->setModel($model, true );

        $view->display();*/

        
parent::display();
    }

    public function 
addedsensor(){
        
$view $this->getView('sensorsmanager''html' );

        
$model $this->getModel('addedsensor');

        
$view->setModel($modeltrue );

        
$view->display();
    }

}


models/sensorsmanager.php
Codice: [Seleziona]


<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_sensorsmanager
 *
 * @copyright   Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */
 
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
/**
 * Sensors Manager Model
 *
 * @since  0.0.1
*/
class SensorsManagerModelSensorsManager extends JModelItem{

    function 
retrieveSensorsFromDb(){
        
$db JFactory::getDbo();
        
$query $db->getQuery(true);

        
/* Retrieving all sensors in DB */
        
$query->select(array('fos_sensor.id''nodeId''fos_sensor.code''fos_quantity.name''fos_unit_of_measure.name''fos_sensor.installationdate''fos_sensor.latest_lecture'))
            ->
from($db->quoteName('fos_sensor'))
            ->
join('INNER'$db->quoteName('fos_quantity') . ' ON (' $db->quoteName('fos_sensor.quantityId') . ' = ' $db->quoteName('fos_quantity.id') . ')')
            ->
join('INNER'$db->quoteName('fos_node') . ' ON (' $db->quoteName('fos_sensor.nodeId') . ' = ' $db->quoteName('fos_node.id') . ')')
            ->
join('INNER'$db->quoteName('fos_unit_of_measure') . ' ON (' $db->quoteName('fos_quantity.unitOfMeasureId') . ' = ' $db->quoteName('fos_unit_of_measure.id') . ')')
            ->
order($db->quoteName('fos_sensor.id') . ' ASC');

        
/* Reset the query using our newly populated query object */
        
$db->setQuery($query);

        
/* Load the results as a list of stdClass objects (see later for more options on retrieving data) */
        
return  $db->loadRowList();
    }

    public function 
getSensors(/*$id = 1*/){
        
$result $this->retrieveSensorsFromDb();

        return 
$result;
    }
}






models/addedsensor.php


Codice: [Seleziona]


<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_sensorsmanager
 *
 * @copyright   Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */
 
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
/**
 * AddedSensor Model
 *
 * @since  0.0.1
 */
class SensorsManagerModelAddedSensor extends JModelItem{
    function 
retrieveQuantityIdFromDb($selectedquantity){
        
$db JFactory::getDbo();
        
$query $db->getQuery(true);

        
$query->select($db->quoteName('id'));
        
$query->from($db->quoteName('fos_quantity'));
        
$query->where($db->quoteName('name') . ' LIKE '$db->quote($selectedquantity));

        
$db->setQuery($query);
        return 
$db->loadResult();
    }

    function 
addSensorIntoDb($selectedidnode$selectedcode$convertedquantityid$selecteddate){
        
/* Creating object to insert into Db */
        
$sensor = new stdClass();
        
$sensor->code $selectedcode;
        
$sensor->nodeId $selectedidnode;
        
$sensor->quantityId $convertedquantityid;
        
$sensor->installationdate $selecteddate;

        
JFactory::getDbo()->insertObject('fos_sensor'$sensor);
    }

    function 
retrieveSensorsFromDb(){
        
$db JFactory::getDbo();
        
$query $db->getQuery(true);

        
/* Retrieving all sensors in DB */
        
$query->select(array('fos_sensor.id''nodeId''code''fos_quantity.name''fos_unit_of_measure.name''fos_sensor.installationdate'))
            ->
from($db->quoteName('fos_sensor'))
            ->
join('INNER'$db->quoteName('fos_quantity') . ' ON (' $db->quoteName('fos_sensor.quantityId') . ' = ' $db->quoteName('fos_quantity.id') . ')')
            ->
join('INNER'$db->quoteName('fos_node') . ' ON (' $db->quoteName('fos_sensor.nodeId') . ' = ' $db->quoteName('fos_node.id') . ')')
            ->
join('INNER'$db->quoteName('fos_unit_of_measure') . ' ON (' $db->quoteName('fos_quantity.unitOfMeasureId') . ' = ' $db->quoteName('fos_unit_of_measure.id') . ')')
            ->
order($db->quoteName('fos_sensor.id') . ' ASC');

        
/* Reset the query using our newly populated query object */
        
$db->setQuery($query);

        
/* Load the results as a list of stdClass objects (see later for more options on retrieving data) */
        
return $db->loadRowList();
    }

    
/* getAddedSensor performs 3 queries:
    1. Retrieves quantityId from Db
    2. Inserts sensor into Db
    3. Retrieves all sensors */
    
public function getAddedSensor(){

        
/* Retrieving parameters from POST */
        
$jinput JFactory::getApplication()->input;
        
$selectedidnode $jinput->getInt('selectnode');
        
$selectedquantity $jinput->get('selectquantity');
        
$selectedcode $jinput->getInt('selectcode');
        
$selecteddate $jinput->get('selectdate');

        
/* Retrieving quantityId from Db */
        
$quantityId $this->retrieveQuantityIdFromDb($selectedquantity);

        
/* Converting quantityId string to int */
        
$convertedquantityid = (int)$quantityId;

        
/* Adding sensor into Db */
        
$this->addSensorIntoDb($selectedidnode$selectedcode$convertedquantityid$selecteddate);

        
/* Retrieving all sensors from Db */
        
$result $this->retrieveSensorsFromDb();

        return 
$result;
    }
}


Tutto funziona come deve, nel senso che quando voglio semplicemente visualizzare i dati me li visualizza e quando voglio prima inserire e poi visualizzare prima inserisce e poi visualizza come deve. L'unico problema è che quando prima aggiungo e poi visualizzo mi esce il seguente errore che non capisco a cosa sia dovuto:

Notice: Undefined index: sensorsmanager in C:\Users\Giulia\Desktop\xampp\htdocs\fostirocinio\libraries\legacy\view\legacy.php on line
429

Qualcuno ha idea di come risolvere?
Secondo voi ha senso settare model e view nel controller come ho fatto io?


Grazie a tutti per l'ascolto


Giulia
« Ultima modifica: 27 Mag 2016, 11:42:30 da memma1989 »

 



Web Design Bolzano Kreatif