æè¿åå¤èªå·±åä¸ä¸ªå客系ç»ï¼ç±äºä½¿ç¨è¿laravelï¼thinkphpï¼cakephpï¼ciçæ¡æ¶ï¼æåå³å®ä½¿ç¨yafï¼åå å°±æ¯é度快ï¼å ¶ä»æ¡æ¶è½ç¶æç¨ï¼ä½æ¯qpsççå¾ä½ãæç项ç®ä¹æ¯è¾ç®åï¼å¢å æ¹æ¥ã
äºæ¯å³å®ä½¿ç¨yafï¼ä½¿ç¨swooleä½ä¸ºhttpæå¡å¨ï¼å¼ç¨ä¸äºå¸¸ç¨çå ï¼ä¾å¦smartyï¼medooæä½æ°æ®åºã
é¦å éè¦æç¡®çå 个é®é¢ï¼
1.yafä¸æ¯æå®æ´çpsrï¼è¿ä¸ªå¾æ³å槽ï¼ä½æ¯é¸å¥ä¸æ¿ææ¹åï¼å¯è½æ¯å 为æ¹å¨å¤ªå¤§ï¼ç¸å½äºä»æ°é äºä¸ä¸ªyafï¼ä¸ç¶è¯¥å«yafyafï¼yet another yaf äºã
2.ç°å¨é½ä½¿ç¨composeræ¥è¿è¡å 管çï¼è®©yafæ¯æçè¯ï¼ä¹éè¦åä¸äºæ¹å¨ï¼ä»ä¹é½èªå·±å太麻ç¦äºã
äºæ¯åå¤åä¸é¢å 件äºæ ï¼
第ä¸æ¥å¼å¯yafå½å空é´æ¯æï¼ä¸ºäºæ¹ä¾¿ä½¿ç¨å ¶å®composerå ï¼å®è£ smartyå ï¼
composer require smarty/smarty
ä¿®æ¹phpçé ç½®æ件ï¼
extension=yaf
yaf.use_namespace=1 #å¼å¯å½å空é´
yaf.lowcase_path=1 #è·¯å¾å
¨é¨è½¬æ¢ä¸ºå°å
yaf.cache_config=1
é¦å ä¿®æ¹é ç½®æ件ï¼
[common]
application.directory = APPLICATION_PATH "/application"
application.dispatcher.catchException = TRUE
application.view.ext=tpl #设置模æ¿æ件åç¼ï¼ä¾smarty使ç¨
[product : common]
database.database_type='mysql'
database.database_name='blog'
database.server='xxx'
database.username='user'
database.password='xxx'
database.charset='utf8mb4'
database.collation='utf8mb4_general_ci'
database.port=3306
#设置smartyç¸å
³çåæ°
smarty.left_delimiter = "{{ "
smarty.right_delimiter = " }}"
smarty.template_dir = APPLICATION_PATH "/application/views/"
smarty.compile_dir = APPLICATION_PATH "/application/cache/compile"
smarty.cache_dir = APPLICATION_PATH "/application/cache/"
smarty.caching = 0
bootstrap.phpéé¢å è½½comoserçautoloadæ件ã
public function _initLoad()
{
Yaf\Loader::import(APPLICATION_PATH . '/application/vendor/autoload.php');
}
第äºæ¥ä¿®æ¹åå§ä»£ç ï¼ä½¿å ¶ç¬¦åå½å空é´çè°ç¨ï¼
åèï¼https://www.laruence.com/2020/04/18/5832.html#comment-147520
å°±æ¯éè¦æåæ¥çYaf_æ¿æ¢ä¸ºYaf\ï¼ä½¿ç¨ç¼è¾å¨å ¨å±æ¿æ¢å³å¯ã
第ä¸æ¥ï¼åviewçéé å¨ï¼å®ç°Yaf\View_Interfaceæ¥å£
å¿ é¡»å®ç°ä¸é¢è¿å 个æ¹æ³ã
public string render( string $view_path ,
array $tpl_vars = NULL );
public boolean display( string $view_path ,
array $tpl_vars = NULL );
public boolean assign( mixed $name ,
mixed $value = NULL );
public boolean setScriptPath( string $view_directory );
public string getScriptPath( void ); #è¿ä¸ªå°æ¹æ¯è¾åï¼yaf3.2æè¿éæ¹æéè¦åæ°äºï¼ä½æ¯ææ¡£è¿æ²¡æ¹ï¼æä¸é¢çæ¹æ³æ¯è¯¥æ´æ£ä¹åçã
<?php
class SmartyAdapter implements Yaf\View_Interface
{
/**
* Smarty object
* @var Smarty
*/
public $_smarty;
/**
* Constructor
*
* @param string $tmplPath
* @param array $extraParams
* @return void
*/
public function __construct($tmplPath = null, $extraParams = array())
{
Yaf\Loader::import(APPLICATION_PATH . '/application/vendor/smarty/smarty/libs/bootstrap.php');
$this->_smarty = new Smarty();
if (null !== $tmplPath) {
$this->setScriptPath($tmplPath);
}
foreach ($extraParams as $key => $value) {
$this->_smarty->$key = $value;
}
}
/**
* Return the template engine object
*
* @return Smarty
*/
public function getEngine()
{
return $this->_smarty;
}
/**
* Set the path to the templates
*
* @param string $path The directory to set as the path.
* @return void
*/
public function setScriptPath($path)
{
if (is_readable($path)) {
$this->_smarty->template_dir = $path;
return;
}
throw new Exception('Invalid path provided');
}
/**
* Retrieve the current template directory
*
* @return string
*/
public function getScriptPath($request = null)
{
return $this->_smarty->template_dir ?? null;
}
/**
* Alias for setScriptPath
*
* @param string $path
* @param string $prefix Unused
* @return void
*/
public function setBasePath($path, $prefix = 'Zend_View')
{
return $this->setScriptPath($path);
}
/**
* Alias for setScriptPath
*
* @param string $path
* @param string $prefix Unused
* @return void
*/
public function addBasePath($path, $prefix = 'Zend_View')
{
return $this->setScriptPath($path);
}
/**
* Assign a variable to the template
*
* @param string $key The variable name.
* @param mixed $val The variable value.
* @return void
*/
public function __set($key, $val)
{
$this->_smarty->assign($key, $val);
}
/**
* Allows testing with empty() and isset() to work
*
* @param string $key
* @return boolean
*/
public function __isset($key)
{
return (null !== $this->_smarty->get_template_vars($key));
}
/**
* Allows unset() on object properties to work
*
* @param string $key
* @return void
*/
public function __unset($key)
{
$this->_smarty->clear_assign($key);
}
/**
* Assign variables to the template
*
* Allows setting a specific key to the specified value, OR passing
* an array of key => value pairs to set en masse.
*
* @see __set()
* @param string|array $spec The assignment strategy to use (key or
* array of key => value pairs)
* @param mixed $value (Optional) If assigning a named variable,
* use this as the value.
* @return void
*/
public function assign($spec, $value = null)
{
if (is_array($spec)) {
$this->_smarty->assign($spec);
return;
}
$this->_smarty->assign($spec, $value);
}
/**
* Clear all assigned variables
*
* Clears all variables assigned to Zend_View either via
* {@link assign()} or property overloading
* ({@link __get()}/{@link __set()}).
*
* @return void
*/
public function clearVars()
{
$this->_smarty->clear_all_assign();
}
/**
* Processes a template and returns the output.
*
* @param string $name The template to process.
* @return string The output.
*/
public function render($name, $value = null)
{
return $this->_smarty->fetch($name);
}
public function display($name, $value = null)
{
echo $this->_smarty->fetch($name);
}
}
public function _initView(Yaf\Dispatcher $dispatcher)
{
$smartyConfig = Yaf\Registry::get("config")->get("smarty");
//å¨è¿é注åèªå·±çviewæ§å¶å¨ï¼ä¾å¦smarty,firekylin
$smarty = new SmartyAdapter(null, $smartyConfig);
$dispatcher::getInstance()->setView($smarty);
}
第åæ¥ï¼ä¿®æ¹bootstrapéé¢çiitViewæ¹æ³ï¼æ´æ¹samrty为viewç渲æå¼æ
D:\phpStudy\PHPTutorial\WWW\yaf_test\application\Bootstrap.php
public function _initView(Yaf\Dispatcher $dispatcher)
{
$smartyConfig = Yaf\Registry::get("config")->get("smarty");
//å¨è¿é注åèªå·±çviewæ§å¶å¨ï¼ä¾å¦smarty,firekylin
$smarty = new SmartyAdapter(null, $smartyConfig);
$dispatcher::getInstance()->setView($smarty);
}
第äºæ¥ï¼å¨æ¨¡æ¿é使ç¨smarty渲æ
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
{{ foreach from=$list item=item key=key }}
{{ $item['id'] }} == {{ $item['name'] }}
<br>
{{ /foreach }}
</body>
</html>
æ§å¶å¨ä»£ç ï¼
<?php
use \Yaf\Controller_Abstract as Controller;
/**
* @name IndexController
* @author admin
* @desc é»è®¤æ§å¶å¨
* @see http://www.php.net/manual/en/class.yaf-controller-abstract.php
*/
class IndexController extends Controller
{
/**
* é»è®¤åå§åæ¹æ³ï¼å¦æä¸éè¦ï¼å¯ä»¥å é¤æè¿ä¸ªæ¹æ³
* å¦æè¿ä¸ªæ¹æ³è¢«å®ä¹ï¼é£ä¹å¨Controller被æé 以åï¼Yafä¼è°ç¨è¿ä¸ªæ¹æ³
*/
public function init()
{
if (wantJson()) {#å¤æ请æ±æ¯å¦æ¯éè¦jsonæ°æ®è¿å
Yaf\Dispatcher::getInstance()->disableView();
}
}
/**
* é»è®¤å¨ä½
* Yafæ¯æç´æ¥æYaf\Request_Abstract::getParam()å¾å°çåååæ°ä½ä¸ºActionçå½¢å
* 对äºå¦ä¸çä¾å, å½è®¿é®http://yourhost/yaf_skeleton/index/index/index/name/admin çæ¶å, ä½ å°±ä¼åç°ä¸å
*/
public function indexAction($name = "Stranger")
{
//1. fetch query
$get = $this->getRequest()->getQuery();
//2. fetch model
$user = new UserModel();
$list = $user->list();
$this->getView()->assign(compact('list'));
}
}
ææå¦ä¸ï¼
å°è¿éå°±å®æäºsamrtyçéæã