Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
1028899f
Commit
1028899f
authored
Dec 30, 2013
by
Alexander Makarov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixes #1609: Adjusted code style, added some docs
parent
2528cd54
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
106 additions
and
75 deletions
+106
-75
template.md
docs/guide/template.md
+38
-0
CHANGELOG.md
extensions/yii/twig/CHANGELOG.md
+1
-2
README.md
extensions/yii/twig/README.md
+1
-0
TwigSimpleFileLoader.php
extensions/yii/twig/TwigSimpleFileLoader.php
+13
-16
ViewRenderer.php
extensions/yii/twig/ViewRenderer.php
+52
-55
ViewRendererStaticClassProxy.php
extensions/yii/twig/ViewRendererStaticClassProxy.php
+1
-2
No files found.
docs/guide/template.md
View file @
1028899f
...
...
@@ -21,6 +21,9 @@ component's behavior:
'class'
=>
'yii\twig\ViewRenderer'
,
//'cachePath' => '@runtime/Twig/cache',
//'options' => [], /* Array of twig options */
'globals'
=>
[
'html'
=>
'\yii\helpers\Html'
],
*
Example
:
*
Than
in
template
:
{{
html
.
link
(
'Login'
,
'site/login'
)
}}
],
// ...
],
...
...
@@ -67,6 +70,41 @@ Within Twig templates, you can also make use of these variables:
-
`app`
, which equates to
`\Yii::$app`
-
`this`
, which equates to the current
`View`
object
### Globals
You can add global helpers or values via config's
`globals`
. It allows both using Yii helpers and setting your own
values:
```
php
'globals'
=>
[
'html'
=>
'\yii\helpers\Html'
,
'name'
=>
'Carsten'
,
],
```
Then in your template you can use it the following way:
```
Hello, {{name}}! {{ html.link('Please login', 'site/login') }}.
```
### Additional filters
Additional filters may be added via config's
`filters`
option:
```
php
'filters'
=>
[
'jsonEncode'
=>
'\yii\helpers\Json::encode'
,
],
```
Then in the template you can use
```
{{ model|jsonEncode }}
```
Smarty
------
...
...
extensions/yii/twig/CHANGELOG.md
View file @
1028899f
...
...
@@ -4,8 +4,7 @@ Yii Framework 2 twig extension Change Log
2.
0.0 beta under development
----------------------------
-
no changes in this release.
-
Add File based Twig loader for better caching and usability of twig's file based function
-
Add File based Twig loader for better caching and usability of twig's file based function (dev-mraj, samdark)
2.
0.0 alpha, December 1, 2013
-----------------------------
...
...
extensions/yii/twig/README.md
View file @
1028899f
...
...
@@ -15,6 +15,7 @@ return [
'class'
=>
'yii\twig\ViewRenderer'
,
//'cachePath' => '@runtime/Twig/cache',
//'options' => [], /* Array of twig options */
// ... see ViewRenderer for more options
],
],
],
...
...
extensions/yii/twig/TwigSimpleFileLoader.php
View file @
1028899f
...
...
@@ -14,21 +14,20 @@ namespace yii\twig;
* Twig view file loader class.
*
* @author dev-mraj <dev.meghraj@gmail.com>
* @version 1.0.0
*/
class
TwigSimpleFileLoader
implements
\Twig_LoaderInterface
{
class
TwigSimpleFileLoader
implements
\Twig_LoaderInterface
{
/**
* @var string Path to directory
*/
private
$_dir
;
/*
* @param
@dir string
path to directory
/*
*
* @param
string $dir
path to directory
*/
public
function
__construct
(
$dir
)
{
$this
->
_dir
=
$dir
;
$this
->
_dir
=
$dir
;
}
/**
...
...
@@ -36,17 +35,17 @@ class TwigSimpleFileLoader implements \Twig_LoaderInterface {
*
* @param $name string file name to check
* @param $time int timestamp to compare with
* @return bool true if file is still fresh and not changes, false otherwise
* @return bool
ean
true if file is still fresh and not changes, false otherwise
*/
public
function
isFresh
(
$name
,
$time
)
{
return
filemtime
(
$this
->
getFilePath
(
$name
))
<=
$time
;
return
filemtime
(
$this
->
getFilePath
(
$name
))
<=
$time
;
}
/**
*
g
et the source of given file name
*
G
et the source of given file name
*
* @param
$name string
file name
* @param
string $name
file name
* @return string contents of given file name
*/
public
function
getSource
(
$name
)
...
...
@@ -55,8 +54,8 @@ class TwigSimpleFileLoader implements \Twig_LoaderInterface {
}
/**
*
get a
unique key that can represent this file uniquely among other files.
* @param $name
*
Get
unique key that can represent this file uniquely among other files.
* @param
string
$name
* @return string
*/
public
function
getCacheKey
(
$name
)
...
...
@@ -66,11 +65,10 @@ class TwigSimpleFileLoader implements \Twig_LoaderInterface {
/**
* internally used to get absolute path of given file name
* @param
$name string
file name
* @param
string $name
file name
* @return string absolute path of file
*/
protected
function
getFilePath
(
$name
){
return
$this
->
_dir
.
'/'
.
$name
;
return
$this
->
_dir
.
'/'
.
$name
;
}
}
\ No newline at end of file
extensions/yii/twig/ViewRenderer.php
View file @
1028899f
...
...
@@ -13,7 +13,6 @@ use Yii;
use
yii\base\View
;
use
yii\base\ViewRenderer
as
BaseViewRenderer
;
use
yii\helpers\Html
;
use
yii\twig\TwigSimpleFileLoader
;
/**
* TwigViewRenderer allows you to use Twig templates in views.
...
...
@@ -37,7 +36,7 @@ class ViewRenderer extends BaseViewRenderer
/**
* @var array Objects or static classes
* Keys of array are names to call in template, values - objects or names of static class as string
* Example:
array('html'=>'\yii\helpers\Html')
* Example:
['html' => '\yii\helpers\Html']
* Than in template: {{ html.link('Login', 'site/login') }}
*/
public
$globals
=
[];
...
...
@@ -45,7 +44,7 @@ class ViewRenderer extends BaseViewRenderer
/**
* @var array Custom functions
* Keys of array are names to call in template, values - names of functions or static methods of some class
* Example:
array('rot13'=>'str_rot13', 'link'=>'\yii\helpers\Html::link')
* Example:
['rot13' => 'str_rot13', 'link' => '\yii\helpers\Html::link']
* Than in template: {{ rot13('test') }} or {{ link('Login', 'site/login') }}
*/
public
$functions
=
[];
...
...
@@ -53,14 +52,14 @@ class ViewRenderer extends BaseViewRenderer
/**
* @var array Custom filters
* Keys of array are names to call in template, values - names of functions or static methods of some class
* Example:
array('rot13'=>'str_rot13', 'jsonEncode'=>'\yii\helpers\Json::encode')
* Example:
['rot13' => 'str_rot13', 'jsonEncode' => '\yii\helpers\Json::encode']
* Then in template: {{ 'test'|rot13 }} or {{ model|jsonEncode }}
*/
public
$filters
=
[];
/**
* @var array Custom extensions
* Example:
array('Twig_Extension_Sandbox', 'Twig_Extension_Text')
* Example:
['Twig_Extension_Sandbox', 'Twig_Extension_Text']
*/
public
$extensions
=
[];
...
...
@@ -69,9 +68,9 @@ class ViewRenderer extends BaseViewRenderer
* @see http://twig.sensiolabs.org/doc/recipes.html#customizing-the-syntax
* Example: Smarty-like syntax
* array(
* 'tag_comment' =>
array('{*', '*}')
,
* 'tag_block' =>
array('{', '}')
,
* 'tag_variable' =>
array('{$', '}')
* 'tag_comment' =>
['{*', '*}']
,
* 'tag_block' =>
['{', '}']
,
* 'tag_variable' =>
['{$', '}']
* )
*/
public
$lexerOptions
=
[];
...
...
@@ -100,28 +99,30 @@ class ViewRenderer extends BaseViewRenderer
if
(
!
empty
(
$this
->
globals
))
{
$this
->
addGlobals
(
$this
->
globals
);
}
// Adding custom functions
if
(
!
empty
(
$this
->
functions
))
{
$this
->
addFunctions
(
$this
->
functions
);
}
// Adding custom filters
if
(
!
empty
(
$this
->
filters
))
{
$this
->
addFilters
(
$this
->
filters
);
}
// Adding custom extensions
if
(
!
empty
(
$this
->
extensions
))
{
$this
->
addExtensions
(
$this
->
extensions
);
}
// Change lexer syntax
if
(
!
empty
(
$this
->
lexerOptions
))
{
$this
->
setLexerOptions
(
$this
->
lexerOptions
);
}
// Adding global 'void' function (usage: {{void(App.clientScript.registerScriptFile(...))}})
$this
->
twig
->
addFunction
(
'void'
,
new
\Twig_Function_Function
(
function
(
$argument
){
}));
}));
$this
->
twig
->
addFunction
(
'path'
,
new
\Twig_Function_Function
(
function
(
$path
,
$args
=
[])
{
return
Html
::
url
(
array_merge
([
$path
],
$args
));
...
...
@@ -130,7 +131,6 @@ class ViewRenderer extends BaseViewRenderer
$this
->
twig
->
addGlobal
(
'app'
,
\Yii
::
$app
);
}
/**
* Renders a view file.
*
...
...
@@ -147,71 +147,71 @@ class ViewRenderer extends BaseViewRenderer
{
$this
->
twig
->
addGlobal
(
'this'
,
$view
);
$this
->
twig
->
setLoader
(
new
TwigSimpleFileLoader
(
dirname
(
$file
)));
return
$this
->
twig
->
render
(
pathinfo
(
$file
,
PATHINFO_BASENAME
),
$params
);
return
$this
->
twig
->
render
(
pathinfo
(
$file
,
PATHINFO_BASENAME
),
$params
);
}
/**
* Adds global objects or static classes
* @param array $globals @see self::$globals
* Adds global objects or static classes
* @param array $globals @see self::$globals
*/
public
function
addGlobals
(
$globals
)
{
public
function
addGlobals
(
$globals
)
{
foreach
(
$globals
as
$name
=>
$value
)
{
if
(
!
is_object
(
$value
))
{
$value
=
new
ViewRendererStaticClassProxy
(
$value
);
}
$this
->
twig
->
addGlobal
(
$name
,
$value
);
}
}
}
/**
* Adds custom functions
* @param array $functions @see self::$functions
*/
public
function
addFunctions
(
$functions
)
{
public
function
addFunctions
(
$functions
)
{
$this
->
_addCustom
(
'Function'
,
$functions
);
}
}
/**
* Adds custom filters
* @param array $filters @see self::$filters
*/
public
function
addFilters
(
$filters
)
{
/**
* Adds custom filters
* @param array $filters @see self::$filters
*/
public
function
addFilters
(
$filters
)
{
$this
->
_addCustom
(
'Filter'
,
$filters
);
}
}
/**
* Adds custom extensions
* @param array $extensions @see self::$extensions
*/
public
function
addExtensions
(
$extensions
)
{
/**
* Adds custom extensions
* @param array $extensions @see self::$extensions
*/
public
function
addExtensions
(
$extensions
)
{
foreach
(
$extensions
as
$extName
)
{
$this
->
twig
->
addExtension
(
new
$extName
());
}
}
}
/**
* Sets Twig lexer options to change templates syntax
* @param array $options @see self::$lexerOptions
*/
public
function
setLexerOptions
(
$options
)
{
/**
* Sets Twig lexer options to change templates syntax
* @param array $options @see self::$lexerOptions
*/
public
function
setLexerOptions
(
$options
)
{
$lexer
=
new
\Twig_Lexer
(
$this
->
twig
,
$options
);
$this
->
twig
->
setLexer
(
$lexer
);
}
}
/**
* Adds custom function or filter
* @param string $classType 'Function' or 'Filter'
* @param array $elements Parameters of elements to add
* @throws \Exception
*/
private
function
_addCustom
(
$classType
,
$elements
)
{
$classFunction
=
'Twig_'
.
$classType
.
'_Function'
;
/**
* Adds custom function or filter
* @param string $classType 'Function' or 'Filter'
* @param array $elements Parameters of elements to add
* @throws \Exception
*/
private
function
_addCustom
(
$classType
,
$elements
)
{
$classFunction
=
'Twig_'
.
$classType
.
'_Function'
;
foreach
(
$elements
as
$name
=>
$func
)
{
$twigElement
=
null
;
...
...
@@ -230,11 +230,8 @@ class ViewRenderer extends BaseViewRenderer
if
(
$twigElement
!==
null
)
{
$this
->
twig
->
{
'add'
.
$classType
}(
$name
,
$twigElement
);
}
else
{
throw
new
\Exception
(
Yii
::
t
(
'yiiext'
,
'Incorrect options for "{classType}" [{name}]'
,
array
(
'{classType}'
=>
$classType
,
'{name}'
=>
$name
)));
throw
new
\Exception
(
"Incorrect options for
\"
$classType
\"
$name
."
);
}
}
}
}
extensions/yii/twig/ViewRendererStaticClassProxy.php
View file @
1028899f
<?php
/**
* Twig
view renderer
class file.
* Twig
ViewRendererStaticClassProxy
class file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright © 2008 Yii Software LLC
...
...
@@ -14,7 +14,6 @@ namespace yii\twig;
* Needed because you can't pass static class to Twig other way
*
* @author Leonid Svyatov <leonid@svyatov.ru>
* @version 1.0.0
*/
class
ViewRendererStaticClassProxy
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment