1
votes

I have followed the following documentation and I am having problems. I access the url as localhost/epos and the index page works fine. but if i do localhost/epos/pgeline2d i get error

An error occurred
Page not found
Exception information:

Message: Invalid controller specified (epos)
Stack trace:

#0 /opt/eposdatatransfer/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 /opt/eposdatatransfer/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#2 /opt/eposdatatransfer/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#3 /opt/eposdatatransfer/public/index.php(26): Zend_Application->run()
#4 {main}  

Request Parameters:

array (
  'controller' => 'epos',
  'action' => 'guestbook',
  'module' => 'default',
)  

The table name in my SQLLite db is called "PGE_Line2D". Below are my files:

httpd.conf

Alias /epos "/opt/eposdatatransfer/public"

<Directory "/opt/eposdatatransfer/public">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
</Directory>

application/configs/application.ini

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
phpSettings.date.timezone = "Europe/London"
resources.db.adapter = "PDO_SQLITE"
resources.db.params.dbname = APPLICATION_PATH "/../data/db/h3111142.db"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

application/bootstrap.php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap  {}

application/views/scripts/index/index.phtml

hello

application/views/scripts/pge-line-2d/index.phtml

<br /><br />
<div id="view-content">
    <p>View script for controller <b>PgeLine2D</b> and script/action name <b>index</b></p>
    <?php foreach ($this->entries as $entry): ?>
    <dt><?php echo $this->escape($entry->pga_id) ?></dt>
    <?php endforeach ?>
</div>

application/models/PGLine2D.php

class Application_Model_PgeLine2D
{
    protected $_PGA_Id ;
    protected $_PGA_Name ;

    public function __construct(array $options = null)
    {
        if (is_array($options)) {
            $this->setOptions($options);
        }
    }

    public function __set($name, $value){
        $method = 'set' . $name;
        if (('mapper' == $name) || !method_exists($this, $method)) {
            throw new Exception('Invalid set PgeLine2D property');
        }
        $this->$method($value);
    }

    public function __get($name){
        $method = 'get' . $name;
        if (('mapper' == $name) || !method_exists($this, $method)) {
            throw new Exception('Invalid get PgeLine2D property');
        }
        return $this->$method();
    }

    public function setOptions(array $options)
    {
        $methods = get_class_methods($this);
        foreach ($options as $key => $value) {
            $method = 'set' . ucfirst($key);
            if (in_array($method, $methods)) {
                $this->$method($value);
            }
        }
        return $this;
    }

    public function setPGA_Id($id){
        $this->PGA_Id = $id;
        return $this;
    }

    public function getPGA_Id(){
        return $this->PGA_Id;
    }

    public function setPGA_Name($name){
        $this->PGA_Name = $name;
        return $this;
    }

    public function getPGA_Name(){
        return $this->PGA_Name;
    }


}

application/models/PGLine2DMapper.php

class Application_Model_PgeLine2DMapper
{
    protected $_dbTable;

    public function setDbTable($dbTable)
    {
        if (is_string($dbTable)) {
            $dbTable = new $dbTable();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }

    public function getDbTable()
    {
        if (null === $this->_dbTable) {
            $this->setDbTable('Application_Model_DbTable_PgeLine2D');
        }
        return $this->_dbTable;
    }

    public function save(Application_Model_PgeLine2D $pgeLine2D)
    {
        $data = array(
                'PGA_Name'   => $pgeLine2D->getPGA_Name()
        );

        if( null === ($id = $pgeLine2D->getPGA_Id()) ) {
            unset($data['id']);
            $this->getDbTable()->insert($data);
        } else {
            $this->getDbTable()->update($data, array('PGA_Id = ?' => $id));
        }
    }

    public function find($id, Application_Model_PgeLine2D $pgeLine2D)
    {
        $result = $this->getDbTable()->find($id);
        if (0 == count($result)) {
            return;
        }
        $row = $result->current();
        $pgeLine2D->setPGA_Id($row->PGA_Id)
            ->setPGA_Name($row->PGA_Name);
    }

    public function fetchAll()
    {
        $resultSet = $this->getDbTable()->fetchAll();
        $entries   = array();
        foreach ($resultSet as $row) {
            $entry = new Application_Model_PgeLine2D();
            $entry->setPGA_Id($row->PGA_Id)
                ->setPGA_Name($row->PGA_Name);
            $entries[] = $entry;
        }
        return $entries;
    }

}

application/models/DbTable/PGLine2D.php

class Application_Model_DbTable_PgeLine2D extends Zend_Db_Table_Abstract
{

    protected $_name = 'PGE_Line2D';


}

application/controllers/PgeLine2DController.php

class PgeLine2DController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        // action body
        $pgeLine2D = new Application_Model_PgeLine2DMapper();
        $this->view->entries = $pgeLine2D->fetchAll();
    }


}
1
I guess it's actually a matter of configuration: your application files (controllers, view scripts etc.) are not even touched by HTTP request, it fails right out. So may be your question would be more clear if you move your .php files out of it - just a suggestion, though.raina77ow
... yet that may not be the case. Try renaming your PgeLine2DController to something more simple - pgeController, for example, and change the link accordingly (localhost/epos/pge/). Will it change anything?raina77ow
@raina77ow I have tried renaming it. does not make a difference. I also followed the documentation using the guestbook example. that did not work eithershorif2000

1 Answers

2
votes

When you use aliases instead of new domain you must add

resources.frontController.baseUrl = "/epos" 

To yours config.ini file.