まず、私は codeigniter を最初にフレームワークを学び始めたときに使用しましたが、その後、会社で thinkphp を使用し、その後 2 つを使用し始めました。まず、これら 2 つのフレームワーク フォルダーの容量は比較的大きく、軽量とは言えません。
今日は codeigniter フレームワークについてだけ話します
公式 Web サイトのコントローラーがテンプレートを呼び出す例を見てみましょう
<?phpclass Blog extends CI_Controller { function index() { $data['title'] = "My Real Title"; $data['heading'] = "My Real Heading"; $this->load->view('blogview', $data); }}?>
<html><head><title><?php echo $title;?></title></head><body> <h1><?php echo $heading;?></h1></body></html>
<?php//template.php/** * Copyright (c) 2003 Brian E. Lozier (brian@massassi.net) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */class Template { var $vars; /// Holds all the template variables var $path; /// Path to the templates /** * Constructor * * @param string $path the path to the templates * * @return void */ function Template($path = null) { $this->path = $path; } /** * Set the path to the template files. * * @param string $path path to template files * * @return void */ function set_path($path) { $this->path = $path; } /** * Set a template variable. * * @param string $name name of the variable to set * @param mixed $value the value of the variable * * @return void */ function set($name, $value) { $this->vars[$name] = $value; } /** * Open, parse, and return the template file. * * @param string string the template file name * * @return string */ function fetch($file) { extract($this->vars); // Extract the vars to local namespace ob_start(); // Start output buffering include($this->path . $file); // Include the file $contents = ob_get_contents(); // Get the contents of the buffer ob_end_clean(); // End buffering and discard return $contents; // Return the contents }}/** * An extension to Template that provides automatic caching of * template contents. */class CachedTemplate extends Template { var $cache_id; var $expire; var $cached; /** * Constructor. * * @param string $path path to template files * @param string $cache_id unique cache identifier * @param int $expire number of seconds the cache will live * * @return void */ function CachedTemplate($path, $cache_id = null, $expire = 900) { $this->Template($path); $this->cache_id = $cache_id ? 'cache/' . md5($cache_id) : $cache_id; $this->expire = $expire; } /** * Test to see whether the currently loaded cache_id has a valid * corrosponding cache file. * * @return bool */ function is_cached() { if($this->cached) return true; // Passed a cache_id? if(!$this->cache_id) return false; // Cache file exists? if(!file_exists($this->cache_id)) return false; // Can get the time of the file? if(!($mtime = filemtime($this->cache_id))) return false; // Cache expired? if(($mtime + $this->expire) < time()) { @unlink($this->cache_id); return false; } else { /** * Cache the results of this is_cached() call. Why? So * we don't have to double the overhead for each template. * If we didn't cache, it would be hitting the file system * twice as much (file_exists() & filemtime() [twice each]). */ $this->cached = true; return true; } } /** * This function returns a cached copy of a template (if it exists), * otherwise, it parses it as normal and caches the content. * * @param $file string the template file * * @return string */ function fetch_cache($file) { if($this->is_cached()) { $fp = @fopen($this->cache_id, 'r'); $contents = fread($fp, filesize($this->cache_id)); fclose($fp); return $contents; } else { $contents = $this->fetch($file); // Write the cache if($fp = @fopen($this->cache_id, 'w')) { fwrite($fp, $contents); fclose($fp); } else { die('Unable to write cache.'); } return $contents; } }}?>
<?php//user_list.phprequire_once('template.php');/** * This variable holds the file system path to all our template files. */$path = './templates/';/** * Create a template object for the outer template and set its variables. */$tpl = & new Template($path);$tpl->set('title', 'User List');/** * Create a template object for the inner template and set its variables. The * fetch_user_list() function simply returns an array of users. */$body = & new Template($path);$body->set('user_list', fetch_user_list());/** * Set the fetched template of the inner template to the 'body' variable in * the outer template. */$tpl->set('body', $body->fetch('user_list.tpl.php')); //这个是直接调用模板/** * Echo the results. */echo $tpl->fetch('index.tpl.php');/** * Just a function to simulate the retrieval of a user list. */function fetch_user_list() { return array( array('id' => 1, 'name' => 'bob', 'email' => 'bob@mozilla.org', 'banned' => false), array('id' => 2, 'name' => 'judy', 'email' => 'judy@php.net', 'banned' => false), array('id' => 3, 'name' => 'joe', 'email' => 'joe@opera.com', 'banned' => false), array('id' => 4, 'name' => 'billy', 'email' => 'billy@wakeside.com', 'banned' => true), array('id' => 5, 'name' => 'eileen', 'email' => 'eileen@slashdot.org', 'banned' => false));}?>
//index.tpl.php<html> <head> <title><?=$title;?></title> </head> <body> <h2><?=$title;?></h2><?=$body;?> </body></html>
//user_list.tpl.php<table> <tr> <th>Id</th> <th>Name</th> <th>Email</th> <th>Banned</th> </tr><? foreach($user_list as $user): ?> <tr> <td align="center"><?=$user['id'];?></td> <td><?=$user['name'];?></td> <td><a href="mailto:<?=$user['email'];?>"><?=$user['email'];?></a></td> <td align="center"><?=($user['banned'] ? 'X' : ' ');?></td> </tr><? endforeach; ?></table>
ディスカッションに返信(解決策)
Copyright (c) 2003 ....
LZ はいくつかのフレームワークを推奨しています。 ~
php アンプ
Copyright (c) 2003 ....
10 年前! ! !
今日が4月1日だからって?
テクノロジーと日付の関係は何ですか? codeigniter メソッドとよく似ていると思います~
//template.php
/*** Copyright (c) 2003 Brian E. Lozier (brian@massassi.net)
返信
codeigniter はテンプレート エンジンではありません
フレームワークはもちろん、独自のテンプレートエンジンも持っています
あなたも新しくて違うものになりたいと思いませんか?
4.1 エイプリル フール
php amp
どう思いますか?
あなたのテンプレートと CI の違いは何ですか?
結局のところ、テンプレートはob+extractではないのですか?
php amp
どう思いますか?
見ましたが、特にコメントすることはありません。そのテンプレート エンジンに似ています
CI をお勧めします。使いやすく、テンプレートはすべて同じです。 ,
MVC は分業が細かく、コードがシンプルでわかりやすいと個人的には思います。
CI は問題なく使用しています。
php amp
どう思いますか?
見たけど、コメントすることは何もない、あのテンプレートエンジンに似てる
public function renderPhpFile($_file_, $_params_ = []) { ob_start(); ob_implicit_flush(false); extract($_params_, EXTR_OVERWRITE); require($_file_); return ob_get_clean(); }