Jaké ORM rubrika: Programování: PHP
Ahoj,
jaký byste zvolili ORM pro PHP a proč?
Řeším nový projekt, a kromě Doctrine nic neznám, tak chci vědět, jestli jsou i alternativy.
PHP 5.5, framework vlastní, databáze MySQL (kdyby to ale umělo víc DB, zlobit se nebudu), data charakteru finančních.
Díky:)
Zdravím.
Před několika měsíci jsem dokončil výběr frameworku pro novou verzi eshopu. Po přečtení mnoha recenzí, pár dotazech na různých fórech a několika testech, jsem zakotvil u Yii2. Původně jsem přemýšlel nad Phalconem, ale jeho nástroje pro vytváření koster modelů jsou docela slabé a bylo tam pár dalších věcí.
Proč jsem zakotvil u Yii2:
Je rychlé a to včetně ORM - rychlejší už je jenom Phalcon a čisté SQL.
Přímá podpora bootstrapu
a pár dalších věcí
Co mě na Yii s*re?
Nutnost dodržovat mnoho konvencí.
A co se mě na Yii líbí?
Např. tohle:
Definice validačních pravidel a labelů pro atributy v modelu
public function rules() { return [ [['name', 'surname', 'street', 'housenumber', 'city', 'postcode', 'countrykey', 'email', 'phone', 'customerid'], 'required','message'=>"Povinná položka!"], [['customerid'], 'integer'], [['name'], 'string', 'max' => 29], [['surname'], 'string', 'max' => 30], [['street', 'city'], 'string', 'max' => 50], [['housenumber'], 'string', 'max' => 10], [['countrykey'], 'string', 'max' => 3], [['company'], 'string', 'max' => 40], [['sex'], 'string', 'max' => 1], [['email'], 'string', 'max' => 60], [['email'], 'email'], [['phone'], 'string', 'max' => 20], [['postcode'],'match','pattern' => '/^[1-9]{1}[0-9]{4}$/i','message'=>"Neplatné PSČ"], [['phone'],'match','pattern' => '/^(([+]{1})|(0{0,2}))[0-9 ]{8,15}$/i','message'=>"Neplatné telefonní číslo"], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'addressid' => 'Addressid', 'name' => 'Jméno', 'surname' => 'Příjmení', 'street' => 'Ulice', 'housenumber' => 'Číslo popisné', 'city' => 'Město', 'postcode' => 'PSČ', 'countrykey' => 'Stát', 'company' => 'Firma', 'sex' => 'Sex', 'email' => 'Email', 'phone' => 'Telefon', 'customerid' => 'Customerid', ]; }
View
$form = ActiveForm::begin([ 'id' => 'login-form' ,'fieldConfig' => function($model,$attribute){ $options = []; $options['template'] = "{input} {error}"; $options['hintOptions'] = ['tag'=> 'span']; $options['errorOptions'] = ['tag'=> 'span','class'=>'red bold']; return $options; } ]); ?> ... <tr> <td class='right'>Oslovení</td> <td colspan='2'><?=$form->field($contactAddress, 'sex')->radioList(array('M'=>'pan','F'=>'paní'));?></td> </tr> <tr> <td class='right'><?=$contactAddress->getAttributeLabel('company')?></td> <td colspan='2'><?=$form->field($contactAddress, 'company');?></td> </tr> ... <?php ActiveForm::end(); ?>
A v controleru tohle
... $contactAddress = CustomerContactAddresses::findOne ( [ "customerid" => $this->customerSession->getCustomerid () ] ); ... //natáhne data z POSTU $contactAddress->load ( \Yii::$app->request->post () ); //udělám validaci podle pravidel v modelu, základní pravidla Gii v modelu vygeneruje samo //pokud použiji vestavěné validátory, ActiveForm vygeneruje i validační JS kód $customerValid = $customer->validate ();
P.S. Vykašlete se na kritiku polí modelu, tohle je jeden z důvodů proč ten eshop předělávám po mém předchůdci.
Pro zobrazení všech 8 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře