zendframework/zendframework1
Zend Framework 1 (ZF1) is a legacy PHP framework featuring MVC, autoloading improvements, event management, and a broad component library. End-of-life since Sep 28, 2016; archived and no longer maintained (last release 1.12.20).
Installation:
composer require zendframework/zendframework1:1.12.20
First Use Case:
// application/index.php
require_once 'Zend/Application.php';
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()->run();
application.ini):
[production : development]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.params.displayExceptions = 1
Key Directories:
application/ – Core application logic.library/ – Third-party libraries (including ZF1).public/ – Web-accessible files (index.php, assets).First Controller:
// application/controllers/IndexController.php
class IndexController extends Zend_Controller_Action {
public function init() {
/* Initialize action controller here */
}
public function indexAction() {
$this->view->message = "Hello, Zend Framework 1!";
}
}
First View:
// application/views/scripts/index/index.phtml
<h1><?= $this->escape($message) ?></h1>
Zend_Application for centralized initialization.class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initAutoload() {
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('Application_');
return $autoloader;
}
protected function _initDb() {
$db = Zend_Db::factory('Pdo_Mysql', APP_CONFIG);
Zend_Registry::set('db', $db);
return $db;
}
}
$router = Zend_Controller_Front::getInstance()->getRouter();
$route = new Zend_Controller_Router_Route(
'blog/:year/:month/:title',
array(
'controller' => 'blog',
'action' => 'view'
)
);
$router->addRoute('blog', $route);
Zend_Db for queries and table gateways.$db = Zend_Registry::get('db');
$select = $db->select()
->from('users')
->where('active = ?', 1);
$result = $db->fetchAll($select);
// Table Gateway
$table = new Application_Model_DbTable_Users($db);
$user = $table->find($id)->current();
$form = new Application_Form_Login();
if ($this->getRequest()->isPost()) {
if ($form->isValid($_POST)) {
$data = $form->getValues();
// Process data
}
}
Zend_EventManager for decoupled components.$eventManager = new Zend_EventManager_EventManager();
$eventManager->attach('user.login', function($event) {
// Handle login event
});
$eventManager->trigger('user.login', $this, array('user' => $user));
Zend_Cache.$frontendOptions = array('lifetime' => 86400);
$backendOptions = array('cache_dir' => 'tmp/cache/');
$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
$data = $cache->load('key') ?: $this->_fetchData();
$cache->save($data, 'key');
Zend_Auth and Zend_Acl.$auth = Zend_Auth::getInstance();
if (!$auth->hasIdentity()) {
$adapter = new Zend_Auth_Adapter_DbTable($db);
$result = $auth->authenticate($adapter);
if ($result->isValid()) {
$identity = $result->getIdentity();
}
}
Zend_Locale and Zend_Translate.$translator = new Zend_Translate('array', 'en_US', 'data/translations');
echo $translator->translate('Hello');
Zend_Loader_Autoloader to integrate with existing class structures.$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('Legacy_');
class UserService {
protected $dbAdapter;
public function __construct(Zend_Db_Adapter_Abstract $dbAdapter) {
$this->dbAdapter = $dbAdapter;
}
}
Zend_Test_PHPUnit for unit and functional testing.class UserTest extends Zend_Test_PHPUnit_ControllerTestCase {
public function testIndexAction() {
$this->dispatch('/user/index');
$this->assertController('user');
$this->assertAction('index');
}
}
Zend_Loader_ClassMapAutoloader for faster loading.
$classMap = include 'data/classmap.php';
$autoloader = new Zend_Loader_ClassMapAutoloader($classMap);
$autoloader->register();
Zend_Db_Select had SQL injection risks with ORDER BY and GROUP BY.// UNSAFE
$select->order('user_input');
// SAFE
$select->order('id'); // Hardcoded or validated
debug_backtrace() in custom code if using PHP 7.Zend_Session validators may throw generic exceptions.try {
$session = new Zend_Session_Namespace('user');
} catch (Zend_Session_Exception $e) {
// Log and retry or fallback
}
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('Vendor_');
Zend_Mail and Zend_Http were vulnerable to CRLF injection.How can I help you explore Laravel packages today?