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 !
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 !
Bài liên quan
$tmp = $this->qtty;
echo $tmp[$tensp];
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 !
cảm ơn Lovestormkns nhé !
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 !
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ả!
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 .