kkirsche
kkirsche

Reputation: 1257

Laravel 4 Model Class Function is not being found correctly

I am working on an event manager using the Laravel 4 framework and have made a new model in /app/models/Event.php. In this file, I have the method public function postCreateEvent($eventDetails). I am getting the error, Call to undefined method Illuminate\Events\Dispatcher::postCreateEvent(). Can anyone help me identify why Laravel 4 is not finding the function in the model?

The /app/controllers/Events/Controllers/Manager/ManagerController.php is:

<?php

namespace Events\Controllers\Manager;

use \View, \BaseController, \Site, \Event, \Input;

class ManagerController extends BaseController
{
//This control ensures the user is logged in before they can view any of the manager pages or use the manager actions
public function __construct()
{
    $this->beforeFilter('auth');
}

//This control gets the correct manager page and displays it
public function getManager($nav = null)
{
    if ($nav == null)
    {
        return View::make('manager');
    }
    else
    {
        return View::make('manager/'.$nav);
    }
}

//This control takes the site settings page when it is POSTed and moves it to the model to update the site settings.
public function postSiteSettings()
{
    $siteSettings = array(
        'siteTitle' => Input::get('siteTitle'),
        'siteAddress' => Input::get('siteAddress'),
        'adminEmail' => Input::get('adminEmail'),
        'openRegistrations' => Input::get('openRegistrations')
    );

    Site::postSiteSettings($siteSettings);

    return View::make('manager/settings');
}

public function postCreateEvent()
{
    $eventDetails = array(
        'eventCalendar'         => Input::get('siteTitle'),
        'eventName'             => Input::get('eventName'),
        'eventDescription'      => Input::get('eventDescription'),
        'eventCapacity'         => Input::get('eventCapacity'),
        'eventRegistrationType' => Input::get('eventRegistrationType'),
        'eventLocationName'     => Input::get('eventLocationName'),
        'eventLocationAddress1' => Input::get('eventLocationAddress1'),
        'eventLocationAddress2' => Input::get('eventLocationAddress2'),
        'eventLocationAddress3' => Input::get('eventLocationAddress3'),
        'eventLocationCity'     => Input::get('eventLocationCity'),
        'eventLocationState'    => Input::get('eventLocationState'),
        'eventLocationZIP'      => Input::get('eventLocationZIP'),
        'eventLocationCountry'  => Input::get('eventLocationCountry'),
        'eventLocationPhone'    => Input::get('eventLocationPhone'),
        'eventStartDate'        => Input::get('eventStartDate'),
        'eventEndDate'          => Input::get('eventEndDate'),
        'eventStartTime'        => Input::get('eventStartTime'),
        'eventEndTime'          => Input::get('eventEndTime'),
        'eventRSVPEndDate'      => Input::get('eventRSVPEndDate'),
        'eventPublishDate'      => Input::get('eventPublishDate'),
        'eventArchiveDate'      => Input::get('eventArchiveDate')
    );

    $event = new Event;
    if (Event::postCreateEvent($eventDetails))
    {
        return View::make('manager/createEvent');
    }
    else
    {
        echo "WTF....";
    }
}
}

The /app/models/Event.php is:

<?php

class Event extends Eloquent {

/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'events';

/**
 * Add New Event To The Database
 *
 * @param array
 * @return booelan
 */
public function postCreateEvent($eventDetails)
{
    $event = new Event;
    $event->eventCalendar           = $eventDetails['eventCalendar'];
    $event->eventName               = $eventDetails['eventName'];
    $event->eventDescription        = $eventDetails['eventDescription'];
    $event->eventCapacity           = $eventDetails['eventCapacity'];
    $event->eventRegistrationType   = $eventDetails['eventRegistrationType'];
    $event->eventLocationName       = $eventDetails['eventLocationName'];
    $event->eventLocationAddress1   = $eventDetails['eventLocationAddress1'];
    $event->eventLocationAddress2   = $eventDetails['eventLocationAddress2'];
    $event->eventLocationAddress3   = $eventDetails['eventLocationAddress3'];
    $event->eventLocationCity       = $eventDetails['eventLocationCity'];
    $event->eventLocationState      = $eventDetails['eventLocationState'];
    $event->eventLocationZIP        = $eventDetails['eventLocationZIP'];
    $event->eventLocationCountry    = $eventDetails['eventLocationCountry'];
    $event->eventLocationPhone      = $eventDetails['eventLocationPhone'];
    $event->eventStartDate          = $eventDetails['eventStartDate'];
    $event->eventEndDate            = $eventDetails['eventEndDate'];
    $event->eventStartTime          = $eventDetails['eventStartTime'];
    $event->eventEndTime            = $eventDetails['eventEndTime'];
    $event->eventRSVPEndDate        = $eventDetails['eventRSVPEndDate'];
    $event->eventPublishDate        = $eventDetails['eventPublishDate'];
    $event->eventArchiveDate        = $eventDetails['eventArchiveDate'];
    $event->created_at              = date('Y-m-d H:i:s');
    $event->updated_at              = date('Y-m-d H:i:s');

    if ($event->save())
    {
        return true;
    }
    else
    {
        return false;
    }
}

public static function test()
{
    echo "True";
}
}

Can anyone see why Laravel 4 is not finding the function in the model?

Upvotes: 1

Views: 791

Answers (1)

Altrim
Altrim

Reputation: 6756

The class Event already exists in the framework and that's what you call in

 Event::postCreateEvent($eventDetails)

So it tries to call the postCreateEvent method on the framework's Event class but that method doesn't exist.

Try changing the class name to something else if that helps.

Upvotes: 2

Related Questions