PDA

View Full Version : سوال در مورد نوشتن استاندارد پروژه با yii



barname_newis
یک شنبه 08 تیر 1393, 12:15 عصر
سلام دوستان من کار با فریمورک yii رو تازه شروع کردم و یک پروژه رو دارم مینوسم
تو مقالات خوندم که بیشتر کدهای برنامه باید تو مدل باشه این همون چیزیه که من اصلا رعایت نکردم متاسفانه و بیشتر کدهام در کنترلر هست
ممنون میشم اگه این کدها رو نگاه کنید و ایراد هام رو رو بگید
کد زیر مربوط به قسمت ایجاد سفارش هست که محصولاتی که در سشن سبد خرید قرار داره رو تو دیتابیس ثبت میکنه یه توضیحاتی هم در موردش دادم :
دانلود فایل (http://www.uplooder.net/cgi-bin/dl.cgi?key=95ee7205806fe51afac2f247394be258)
خیلی ممنون

MMSHFE
یک شنبه 08 تیر 1393, 21:37 عصر
کی گفته باید کدها تو مدل باشه؟ فقط کدهای کار با دیتابیس توی مدل هست و منطق برنامه باید در کنترلر باشه. ویو هم که تکلیفش مشخصه. اینکه کنترلر شما یک شئ از مدل ایجاد کنه و مقادیر رو اصلاح کنه و به مدل بگه بره ذخیره کنه، روش درستی هست.

barname_newis
دوشنبه 09 تیر 1393, 00:32 صبح
به نظرتون این قسمت از کدها که گذاشتم خیلی شلوغ نشده؟ پیشنهادتون برای نوشتن تمیز و استاندارد چی هست (برای همین بخش کدها)

MMSHFE
دوشنبه 09 تیر 1393, 07:37 صبح
کدتون در کل بنظر من خوب نوشته شده ولی یک مقدار (جزئی) تغییرش دادم. خودتون با کد اصلی مقایسه کنید تا تفاوتها رو متوجه بشین:

<?php

// carrier = حامل مثل پست پیشتاز ، تیپاکس ، پیک موتوری
public function actionCreate()
{
$model = new Orders;

if(!Yii::app()->user->getState('customerId')) {
throw new CHttpException(403, 'You must login to use this feature.');
}
if(isset($_POST['Orders'])) {
// validate the orders to check all products exist
$orders = $this->validateOrders();
if(!empty($orders)) {
$customerId = Yii::app()->user->getState('customerId');
if(!$this->getCustomer($customerId)) {
$errorFlash = 'ADDRESS_ERROR';
}
else {
if(isset($_POST['carrier'])) {
// returns carrier info
$carrierInfo = $this->getCarrier($_POST['carrier']);
if(!$carrierInfo) {
$errorFlash = 'CARRIRE_ERROR';
}
else {
$carrierSendPrice = Carriers::model()->calculateCarrierSend($carrierInfo['carrier_send_cost'], $orders['wholeWeight']);
if($carrierSendPrice) {
$model->order_create_date = date('Y-m-d H:i:s');
$model->order_total_cost = $orders['wholePrice'];
$model->order_carrier_cost = intval($carrierSendPrice);
if(isset($_POST['orderMessage']) && trim($_POST['orderMessage']) !== '') {
$model->order_description = $_POST['orderMessage'];
}
$model->customers_customer_id = $customerId;
if($model->save()) {
// order_details
if($model->orderId) {
foreach($this->getProductsIdFromCart() as $value) {
$orderDetails = new OrderDetails;
$orderDetails->order_detail_product_count = $orders[$value]['count'];
$orderDetails->orders_order_id = $orderId;
$orderDetails->products_product_id = $value;
if($orderDetails->save()) {
$successFlash='SUCCSESS';
}
}
}
}
}
else {
$errorFlash = 'CARRIER_PRICE_UNKNOWN';
}
}
}
else {
$errorFlash = 'CARRIER_NOT_SENT';
}
}
}
else {
$errorFlash = 'CART_EMPTY';
}
if(isset($errorFlash)) {
Yii::app()->user->setFlash('errorFlash', $errorFlash);
}
if(isset($successFlash)) {
Yii::app()->user->setFlash('successFlash',$successFlash);
}
$this->renderPartial('_createAjax');
}
}