自定义框架 使用smarty的一个问题

manbudezhu 发布于 2016/06/08 10:15
阅读 229
收藏 0
自己写一个小框架,
每次在Indexcontroller.php中使用$this->display()是,都会报错
unlink(Storage/Compile/Home/Index\%%33^33F^33FC67E8%%Login.html.php): No such file or directory.
unlink(Storage/Cache/Home/Index\%2Fmyoschina%2Fframe3.0%2F^%%B5^B56^B5681546%%Login.html): No such file or directory
刷新好几次后正常了,然后在换一个显示页面又报错.
我的smartyView.php 代码
namespace Lib\Core{
class SmartyView{
// 定义一个静态变量,防止频繁创建对象
protected static $smarty=null;
public function __construct(){
// 如果实例化过smarty,不用再次实例化
if(is_null(self::$smarty)){
// 创建smarty对象;
$smarty=new \Smarty();
// 设置smarty参数
// 设置编译目录
$c_dir='Storage/Compile/'.MODUEL.'/'.CONTROLLER;
is_dir($c_dir)||mkdir($c_dir,0777,true);
$smarty->compile_dir=$c_dir;
// 设置模板目录
$t_dir='App/'.MODUEL.'/View/'.CONTROLLER;
is_dir($t_dir)||mkdir($t_dir,0777,true);
$smarty->template_dir=$t_dir;
// 设置缓存文件目录
$ca_dir='Storage/Cache/'.MODUEL.'/'.CONTROLLER;
is_dir($ca_dir)||mkdir($ca_dir,0777,true);
$smarty->cache_dir=$ca_dir;


$smarty->caching=C('SMARTY_CACHE');
$smarty->cache_lifetime=C('SMARTY_CACHE_LIFETIME');
$smarty->left_delimiter=C('LEFT_DELIMITER');
$smarty->right_delimiter=C('RIGHT_DELIMITER');


//局部不缓存(固定写法)
//nocache是一个函数,放在functions.php
$smarty->register_block("nocache", "nocache", false);

// 把smarty对象赋值给静态属性
self::$smarty=$smarty;
}
}


protected function display($tpl=null){
// 如果用户没有传递模板,按照方法名找模板
if(is_null($tpl)) $tpl=ACTION.'.php';
self::$smarty->display($tpl,$_SERVER['REQUEST_URI']);

......
IndexController.php中的调用代码
namespace Home\Controller;
use Lib\Core\SmartyView;
class IndexController extends SmartyView{


public function index(){
$this->display('Login2.html');
}
}
.........
我这个哪块出问题了,请求高手赐教

加载中
0
manbudezhu
manbudezhu
table=is_null($table)?C('TABLE_NAME'):$table; try { // self::$links=new Pdo("mysql:host=127,0,0.1;dbname=c61",'root','welcome'); self::$links=new Pdo('mysql:host='.C('DB_HOST').';dbname='.C('DB_NAME'),C('DB_USER'),C('DB_PWD')); // 设置字符编码 self::$links->query('SET NAMES UTF8'); // 设置错误抛出类型 self::$links->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $this->_opt(); } catch (PDOException $e) { $e->getMessage(); } } // 定义opt属性 private function _opt(){ $this->opt=array( 'field'=>"*", 'where'=>'', 'group'=>'', 'having'=>'', 'order'=>'', 'limit'=>'', ); } //定义myquery方法 public function myquery($sql=null){ // 执行query方法,返回结果集对象 $result=self::$links->query("$sql"); // 取出结果集赋值给数组 $rows=$result->fetchAll(PDO::FETCH_ASSOC); return $rows; } // 定义all方法 public function all(){ // 组合字符串 $sql="select ".$this->opt['field']." from ".$this->table.$this->opt['where'].$this->opt['group'].$this->opt['having'].$this->opt['order'].$this->opt['limit']; echo $sql; return $this->myquery($sql); } //定义field方法 public function field($sql='*'){ // 需要判断'' 的情况 // 给feild元素赋值 $this->opt['field']=$sql; return $this; } public function where($sql=''){ $this->opt['where']=" where ".$sql; return $this; } public function order($sql=''){ $this->opt['order']=" order by ".$sql; return $this; } public function limit($sql=''){ $this->opt['limit']=" limit ".$sql; return $this; } // 定义find()执行 public function find(){ $data=$this->limit(1)->all(); // current()返回数组中当前的元素 $data=current($data); return $data; } // 别名函数one public function one(){ return $this->find(); } // 没有结果集的方法 public function myexec($sql){ // echo $sql; $rows=self::$links->exec($sql); if($rows){ echo "成功执行{$rows}条数据"; return $rows; }else{ halt('执行失败'); return; } } public function delete(){ // 必须判断where存不存在 if(!empty($this->opt['where'])) { $sql="delete from ".$this->table.$this->opt['where']; return $this->myexec($sql); }else{ halt('删除必须有where语句'); return; } } //定义自动转义方法 private function _safe_str($str){ // 判断是否用户提交的数据,包括post,get,cookie. // 如果值为1时为开启,则系统自动转义,如果不为1时,需要调用stripslashes函数转义. if(!get_magic_quotes_gpc()){ $str=addslashes($str); }; return $str; } // 创建添加方法 public function add($data=null){ // 如果没有传递参数,使用$_post的值 // 否则使用传递的值. if(is_null($data)) $data=$_POST; // 定义存储字段和值的变量 $field=''; $values=''; foreach ($data as $f => $v) { $field.="`".$this->_safe_str($f)."`,"; $values.="'".$this->_safe_str($v)."',"; } // 去除末尾的,号 $field=rtrim($field,','); $values=rtrim($values,','); // insert into message (title,cid) values('易建联回到中国',2); // 组合$sql语句,使用myexec执行. $sql="insert into ".$this->table.'('.$field.') values ('.$values.')'; echo $sql; return $this->myexec($sql); } // 修改方法 public function update($data=null){ if(empty($_POST)) return; if(is_null($data)) $data=$_POST; // echo $sql; // 如果没设置where语句 if(!empty($this->opt['where'])) { // update arc set title='快学网',cid='2' where aid=14; $values=''; foreach ($data as $f => $v) { // 组合$sql语句 $values.='`'.$this->_safe_str($f)."`='".$this->_safe_str($v)."',"; } // echo $values; $values=rtrim($values,","); echo $values; $sql="update ".$this->table." set ".$values.$this->opt['where']; return $this->myexec($sql); }else{ halt('更新语句必须有where语句'); return; } } } } ?>
返回顶部
顶部