PHP / Doctrine Bootstrap zur Überprüfung

952
BenV

Hier ist meine bootstrap.phpfür meine PHP / MySQL / Doctrine App. Es ist meine erste PHP-App. Ich bin daran interessiert, aus den Erfahrungen anderer zu lernen, wie dies verbessert werden kann - in Bezug auf Sicherheit, Leistung oder sonstiges.

//-------------------------------------------------------------------------
// Define global constants
define('ROOT_PATH', dirname(__FILE__) . '/');
define('URL_BASE', 'http://localhost/myapp/public/');
define('LIB_PATH', 'C:\\wamp\\www\\lib\\');
define('OPENID_PATH', 'C:\\wamp\www\\lib\\lightopenid.git\\openid.php');

//-------------------------------------------------------------------------
// Bootstrap Doctrine.php, register autoloader, specify
// configuration attributes and load models.
require_once(LIB_PATH . 'doctrine12/lib/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));
$manager = Doctrine_Manager::getInstance();

//-------------------------------------------------------------------------
// Define database connection
$dsn = 'mysql:dbname=mydb;host=127.0.0.1';
$user = 'xxx';
$password = 'yyy';
$dbh = new PDO($dsn, $user, $password);
$conn = Doctrine_Manager::connection($dbh);

//-------------------------------------------------------------------------
// Set defaults
$manager->setAttribute(Doctrine::ATTR_DEFAULT_COLUMN_OPTIONS,
  array('type' => 'string', 'length' => 255, 'notnull' => true));
$conn->setAttribute(Doctrine_Core::ATTR_QUOTE_IDENTIFIER, true);
$manager->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
// Don't load a model until it's needed (causes problems when this is on)
//$manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_CONSERVATIVE);

//-------------------------------------------------------------------------
// Import model objects
Doctrine_Core::loadModels(ROOT_PATH . 'app/models/generated'); // have to load base classes first
Doctrine_Core::loadModels(ROOT_PATH . 'app/models');
Antworten
6
Wie unterscheidet sich dies von der Standardvorlage? Kannst du dich darauf verlinken? TryPyPy vor 10 Jahren 0
@TryPyPy: http://www.doctrine-project.org/projects/orm/1.2/docs/manual/getting-started%3Aimplementing%3Abootstrap-file/de BenV vor 10 Jahren 0

2 Antworten auf die Frage

7
Steven

Hier sind ein paar Zeilen, die nützlich sein könnten, wenn Sie diese Optionen verwenden möchten:

/**
 * Needed for SoftDelete to work
 */
$manager->setAttribute(Doctrine::ATTR_USE_DQL_CALLBACKS, true);

/**
 * Tell doctrine to look for custom ___Table classes in the models folder
 */
$manager->setAttribute(Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true);
5
RobertPitt

Wo Sie angeben Definieren Sie globale Konstanten, indem Sie Ihre Verzeichnisse nicht mit den korrekten Schrägstrichen für das Betriebssystem definieren

Sie können /in Ihrer Anwendung flüssige Schrägstriche verwenden, da sowohl Unix als auch Windows sie unterstützen. Wenn Sie jedoch wirklich auf der sicheren Seite sein möchten, sollten Sie diese Option verwendenDIRECTORY_SEPARATOR

Als Lehre 2.0 unterstützt nur PHP 5.3.0 können Sie ersetzen dirname(__FILE__)mit__DIR__

Ich würde auch eine Konstante erstellen, DSdie normalerweise in einer Konstantendatei erstellt wird und eine der ersten sein sollte.

Ich würde das Obige umwandeln in:

 define('ROOT_PATH' ,  __DIR__);
 define('URL_BASE'  ,  'http://localhost/myapp/public/');
 define('LIB_PATH'  ,  realpath("../../path/to/libs")); //Unix / Windows
 define('OPENID_PATH',  realpath("../../path/to/openid"));//Unix / Windows

Und dann das loadModelsentsprechend ändern ?

Ausgezeichnete Informationen, danke! Nur ein Punkt der Klarstellung - Sie haben nie angegeben, was die "DS" -Konstante ist oder wo Sie sie verwenden würden. BenV vor 9 Jahren 0
Entschuldigung, die `DS`-Konstanten sind eine Kurzversion für` DIRECTORY_SEPARATOR` und Sie würden Ihre Pfade dann wie folgt aufbauen: `LIB_ROOT. DS. "openid". DS. "openid.class.php" `, um Zeilenraum zu sparen. RobertPitt vor 9 Jahren 1