10/10/2018, 09:36

Zend famework ,lổi khó hiểu ?

hiện mình đang nghiên cứu và làm web với zend framework .mình gặp một lổi nhỏ về mảng nhưng không hiểu tại sao lại như vậy nữa .

trong Controller của mình có một action (CartController/listAction) với một đoạn code bên dưới ,trong đó mình sữ dụng hai mảng là $qtty và $thanhtien như sau :

//$cart : giỏ hàng

if($cart->countitems>0){
$tongtien=0;
$danhsachhang="";
foreach($this->result as $record){
$tensp=(string)$record['TenSanPham'];

$qtty[$tensp]=$this->_request->getPost('txtqtty'.$tensp);
$thanhtien[$tensp] =(int)$record['DonGia']*(int)$qtty[$tensp];

}
mình thử in giá tri của hai mảng trên bằng cách thêm code sau trong Controller này thì ok .bằng dòng lệnh sau thêm vào controller trên .

//ket qua dung
echo $qtty[$tensp];
echo $thanhtien[$tensp];
//print_r($qtty) ;
//print_r($thanhtien)

nhưng vấn đề bây giờ em cần in giá trị mảng trong file view scripts (views/scripts/cart/list.phtml)

vì thế mình đã thêm tiếp 3 dòng lệnh sau vào controller trên :

$this->view->tongtien=$tongtien;
$this->view->qtty=(array)$qtty;
$this->view->thanhtien=(array)$thanhtien;

rồi sau đó thêm code vào trong tai file list.phtml

//$tensp = [lấy tên sản phẩm trong giỏ hàng ];
$this->qtty[$tensp];
$this->thanhtien[$tensp];
//print_r($qtty) ;
//print_r($thanhtien)


thì lại báo lổi là

Notice: Undefined index: CA-319
in C:wampwww2applicationmodulesdefaultviewssc riptscartlist.phtml on line 43

lưu ý là nếu in cả hai mảng này trong hai cách trên thì có kết quả hoàn toàn giống nhau

tức là : nếu dùng lệnh print_r($qtty) và print_r($thanhtien) đều có kết quả đúng trong cả hai trường hợp .


in mảng ra là có index là CA-319 nhưng sao lại lổi ?

giúp mình cái nhé ,thật khó hiểu ! .

thanks .





[=========> Bổ sung bài viết <=========]

Nói một cách dễ hiểu hơn là thế này :

mình có mảng : $qtty :

dùng lệnh print_r($this->qtty ) trong list.phtml

cho ra kết quả : Array ( [CA-310] => 1 [CA-316] => 2 [CA-319] => 3 )

nhưng khi mình thêm lênh :

echo $this->qtty[$tensp] ; //lúc này giá trị $tensp='CA-310' ;

thì lại báo lổi : Notice: Undefined index: CA-310

như kết quả trên rỏ là CA-310 có trong mảng như sao nó ko hiểu giá trị index này .

mình hi vọng có cao thủ nào giải thích giúp mình ?

thanks !
lovestormknx viết 11:45 ngày 10/10/2018
Bạn thử làm như sau:

$tmp = $this->qtty;
echo $tmp[$tensp];
nqdungx viết 11:47 ngày 10/10/2018
thật ra những trường hợp này mình cũng đã thử rồi nhưng vẩn không được ,vẫn báo lổi như trên .

cảm ơn bạn đã góp ý !

không biết có lời giải thích nào không ? mong các sư huynh giúp đở !.thanks nhiều nhiều !
lovestormknx viết 11:41 ngày 10/10/2018
Cái này mình đã từng bị 1 lần, giờ ko nhớ nổi lúc đó đã làm như thế nào, tức thật.
nqdungx viết 11:48 ngày 10/10/2018
điều này cho mình biết Lovestormkns có nhiều kinh nghiệm trong zf . cố nhớ giúp mình cái nhé .mình còn học hỏi nhiều nữa .
cảm ơn Lovestormkns nhé !
lovestormknx viết 11:38 ngày 10/10/2018
Mình dùng cake, chỉ mới coi sơ zf, mà lỗi này ko phải là do framework đâu, php căn bản thôi, vẫn chưa nhớ ra, đang lục lại đống code đồ sộ, hix
nqdungx viết 11:41 ngày 10/10/2018
đúng là php cơ bản ,chỉ liên quan đến mảng nhưng mình nghĩ cũng có dính liếu đến zf.
Tại vì khi mình lấy giá trị của mảng này trong lớp xữ lý (controller) thì nó chạy ok .
nhưng khí mình đẩy mảng này giao cho thằng View thì nó nhận được giá trị toàn bộ của mảng nhưng khi lấy giá trị riêng thì báo lổi . nên mình mới nghĩ lên quan đến zf .

mình nghe nói nhiều về cake ,nhưng mình thì chưa tìm hiểu về cake . sẽ tìm hiểu sau .
nhân tiện anh Lovestormkns có thể so sánh điểm lợi hại của zf so với cake ? .
cảm ơn anh Lovestormkns nhiều nhé .
anh cố gắng giúp mình giải quyết rắc rồi này cái nhé .thanks !
lovestormknx viết 11:47 ngày 10/10/2018
Mình đã setup 1 cái test nho nhỏ bằng zf để làm ra lỗi như bạn nhưng kết quả thì lại ok. Giả định của mình như sau:

Trong file index.phtml mình làm 1 form có 3 input box

<input type="text" name="txtqttyCA-310" value="1"/><br>
<input type="text" name="txtqttyCA-316" value="2"/><br>
<input type="text" name="txtqttyCA-319" value="3"/><br>
<input type="submit" value="Ok"/>

Trong controller, mình xử lý:

$thanhtien['CA-310'] = $this->_request->getPost('txtqttyCA-310');
$thanhtien['CA-316'] = $this->_request->getPost('txtqttyCA-316');
$thanhtien['CA-319'] = $this->_request->getPost('txtqttyCA-319');
$this->view->thanhtien = (array)$thanhtien;

Như vậy là không khác gì bạn về dữ liệu rồi nhé!

Ở view, mình làm tiếp

$tensp = 'CA-310';
echo $this->thanhtien[$tensp];

Kết quả sau khi nhấn Ok để submit form là 1. Không lỗi gì cả!
nqdungx viết 11:39 ngày 10/10/2018
code ban đầu của mình :
vòng lặp {
<?php echo $tensp=$this->escape($cart['TenSanPham']).'</br>';?>
//linh tinh (html)
<?php
echo $tensp ;//ket qua :CA-316
echo $qtty; //ket qua là : Array ( [CA-310] => 1 [CA-316] => 2)
echo $this->escape($this->qtty[$tensp]); //báo Undefined index: CA-316
?>
}
Sau đó mình đã thử giống như anh lovestormknx là :

$tensp = 'CA-310';
echo $this->qtty[$tensp];

quả thật kết quả chạy ok .

vậy cốt lổi nằm ở thằng $tensp có vấn đề nhưng mà giá trị của $tensp đúng.


vì vậy mình thử viết lại :

<?php echo $this->escape($cart['TenSanPham']).'</br>';?>
//linh tinh html
<?php
$tensp=$this->escape($cart['TenSanPham']);
echo $this->escape($this->qtty[$tensp]);

?>
không gộp chung echo $tensp=$this->escape($cart['TenSanPham']) nữa .
bây giờ thì ok rồi .

vậy điểm sai ở đây là :
<?php echo $tensp=$this->escape($cart['TenSanPham']).'</br>';?>
vì lúc đầu thấy nó in giá trị $tensp đúng nên không nghĩ là sai ở điểm này .
tại hơi lười một chút .

lổi đã được fix .
cảm ơn lovestormknx nhiều lắm .
Bài liên quan
0