Archived talk

Difference between revisions of "Developing a MVC Component/Using the database"

From Joomla! Documentation

Line 73: Line 73:
  
 
Using that as the ID in the getMsg function will display the proper selection from the menu parameters.
 
Using that as the ID in the getMsg function will display the proper selection from the menu parameters.
 +
 +
Part 06: site/models/helloworld.php not updated
 +
 +
The code is different from the archive. msg instead of messages!

Revision as of 14:45, 20 June 2012

This should really not be the default developing MVC component, the default should redirect to the documentation for whatever is current and this should be on a 1.6 specific page.

In what sense is it the default? Chris Davenport 20:03, 4 March 2010 (UTC)


I'm not sure is this good place to report issues with some sample code found in this tutorial, but it looks like JDatabaseQuery class has not actually being implemented in Joomla 1.6.0 Alpha2. This is causing problems with implementing Menu Item "Required Parameters". Comments in following code explain this a little bit better.

File: /administrator/components/com_testing/models/fields/testing.php (part of Joomla 1.6 test component)

    26                 $db =& JFactory::getDBO();
    27                 /* JDatabaseQuery class could not be found, so following 3 lines caused error
    28                 $query = new JDatabaseQuery;
    29                 $query->select('id,greeting');
    30                 $query->from('#__testing');
    31                 */
    32                 //manually creating query string instead
    33                 $query = 'SELECT id,greeting FROM #__testing';
    34                 $db->setQuery($query);

I recon this is something that would be fixed by actually implementing JDatabaseQuery class once Joomla 1.6 is in beta or latter stage, but for know it could be confusing to those of use following this tutorial. :)

Ivan Rajkovic 8 April 2010 (UTC)

Not working as expected?[edit]

I may be doing something wrong, but I've copied all the code for the first 6 steps, and on this step I run into a problem. My menu item doesn't have the option to select the id under any of the settings. It does show the ID of the menu item itself, so perhaps there is a conflict based on the name??

No New Field In Menu Item[edit]

I have the same problem. I have been trying to get the additional field in the menu item. It does not seem to work. I have tried it on Beta10, Beta5 and Beta1 - no luck. I have even tried the above manually built query (I don't think that is the problem) Any Suggestions? Rpwolfgram 02:45, 2 October 2010 (UTC)

Improper Implementation of the MVC Pattern[edit]

As I was reading through this article on implementing an MVC component, I couldn't help but notice a complete violation of programming standards regarding encapsulation. Please see the chunk of code below that I pulled from the database usage page of this article.

public function getMsg() 
{
	if (!isset($this->msg)) 
	{
		$id = JRequest::getInt('id', 1);
		// Get a TableHelloWorld instance
		$table = $this->getTable();

		// Load the message
		$table->load($id);

		// Assign the message
		$this->msg = $table->greeting;
	}
	return $this->msg;
}

Take notice that the "id" value that is supplied via a request variable is retrieved from within the model method itself. This is completely improper as you now have a model which is no longer portable from one platform (i.e. Joomla) to another (i.e. Zend Framework). Models should always be encapsulated thus meaning any required parameters (such as "id") should be passed into the model method as a parameter. This example needs corrected and the entire article re-evaluated as a whole to ensure that you are not continuing the vicious cycle of bad programming.

Submitted By: Matt Scott (logicalchaosme@gmail.com)

Date: 2012-05-04

UPDATE - 2012-05-04: I have since updated both pages specifically related to the model example to reflect the proper methodologies of implementation.


[MisterEmme] I think the updated version is not working properly: maybe that's bacause $id parameter is not provided to the model

View doesn't pass the selected ID[edit]

It took me a while to figure this out but the selected ID from the Menu is never passed to the model. Thus no matter what option you choose, it will always display "Hello World" as the default for $id is 1

Somewhere in the code the view or model needs to get the ID.

$pk = JRequest::getInt('id');

Using that as the ID in the getMsg function will display the proper selection from the menu parameters.

Part 06: site/models/helloworld.php not updated

The code is different from the archive. msg instead of messages!