- sfDomCssSelector.class.php
- class sfDomCssSelector implements Countable, Iterator
- {
- public $nodes = array();
- private $count;
- public function __construct($nodes)
- {
- if (!is_array($nodes))
- {
- $nodes = array($nodes);
- }
- $this->nodes = $nodes;
- }
- public function getNodes()
- {
- return $this->nodes;
- }
- public function getNode()
- {
- return $this->nodes ? $this->nodes[0] : null;
- }
- public function getValue()
- {
- return $this->nodes[0]->nodeValue;
- }
- public function getValues()
- {
- $values = array();
- foreach ($this->nodes as $node)
- {
- $values[] = $node->nodeValue;
- }
- return $values;
- }
- public function matchSingle($selector)
- {
- $nodes = $this->getElements($selector);
- return $nodes ? new sfDomCssSelector($nodes[0]) : new sfDomCssSelector(array());
- }
- public function matchAll($selector)
- {
- $nodes = $this->getElements($selector);
- return $nodes ? new sfDomCssSelector($nodes) : new sfDomCssSelector(array());
- }
- protected function getElements($selector)
- {
- $nodes = array();
- foreach ($this->nodes as $node)
- {
- $result_nodes = $this->getElementsForNode($selector, $node);
- if ($result_nodes)
- {
- $nodes = array_merge($nodes, $result_nodes);
- }
- }
- foreach ($nodes as $node)
- {
- $node->removeAttribute('sf_matched');
- }
- return $nodes;
- }
- protected function getElementsForNode($selector, $root_node)
- {
- $all_nodes = array();
- foreach ($this->tokenize_selectors($selector) as $selector)
- {
- $nodes = array($root_node);
- foreach ($this->tokenize($selector) as $token)
- {
- $combinator = $token['combinator'];
- $selector = $token['selector'];
- $token = trim($token['name']);
- $pos = strpos($token, '#');
- if (false !== $pos && preg_match('/^[A-Za-z0-9]*$/', substr($token, 0, $pos)))
- {
-
- $tagName = substr($token, 0, $pos);
- $id = substr($token, $pos + 1);
- $xpath = new DomXPath($root_node);
- $element = $xpath->query(sprintf("//*[@id = '%s']", $id))->item(0);
- if (!$element || ($tagName && strtolower($element->nodeName) != $tagName))
- {
-
- return array();
- }
-
- $nodes = array($element);
- $nodes = $this->matchMultipleCustomSelectors($nodes, $selector);
- continue;
- }
- $pos = strpos($token, '.');
- if (false !== $pos && preg_match('/^[A-Za-z0-9\*]*$/', substr($token, 0, $pos)))
- {
-
- $tagName = substr($token, 0, $pos);
- if (!$tagName)
- {
- $tagName = '*';
- }
- $className = substr($token, $pos + 1);
-
- $founds = $this->getElementsByTagName($nodes, $tagName, $combinator);
- $nodes = array();
- foreach ($founds as $found)
- {
- if (preg_match('/\b'.$className.'\b/', $found->getAttribute('class')))
- {
- $nodes[] = $found;
- }
- }
- $nodes = $this->matchMultipleCustomSelectors($nodes, $selector);
- continue;
- }
-
- if (preg_match('/^(\w+|\*)(\[.+\])$/', $token, $matches))
- {
- $tagName = $matches[1] ? $matches[1] : '*';
- preg_match_all('/
- \[
- ([\w\-]+) # attribute
- ([=~\|\^\$\*]?) # modifier (optional)
- =? # equal (optional)
- (
- "([^"]*)" # quoted value (optional)
- |
- ([^\]]*) # non quoted value (optional)
- )
- \]
- /x', $matches[2], $matches, PREG_SET_ORDER);
-
- $founds = $this->getElementsByTagName($nodes, $tagName, $combinator);
- $nodes = array();
- foreach ($founds as $found)
- {
- $ok = false;
- foreach ($matches as $match)
- {
- $attrName = $match[1];
- $attrOperator = $match[2];
- $attrValue = $match[4] ? $match[4] : $match[5];
- switch ($attrOperator)
- {
- case '=':
- $ok = $found->getAttribute($attrName) == $attrValue;
- break;
- case '~':
- $ok = preg_match('/\b'.preg_quote($attrValue, '/').'\b/', $found->getAttribute($attrName));
- break;
- case '|':
- $ok = preg_match('/^'.preg_quote($attrValue, '/').'-?/', $found->getAttribute($attrName));
- break;
- case '^':
- $ok = 0 === strpos($found->getAttribute($attrName), $attrValue);
- break;
- case '$':
- $ok = $attrValue == substr($found->getAttribute($attrName), -strlen($attrValue));
- break;
- case '*':
- $ok = false !== strpos($found->getAttribute($attrName), $attrValue);
- break;
- default :
-
- $ok = $found->hasAttribute($attrName);
- }
- if (false == $ok)
- {
- break;
- }
- }
- if ($ok)
- {
- $nodes[] = $found;
- }
- }
- continue;
- }
-
- $nodes = $this->getElementsByTagName($nodes, $token, $combinator);
- $nodes = $this->matchMultipleCustomSelectors($nodes, $selector);
- }
- foreach ($nodes as $node)
- {
- if (!$node->getAttribute('sf_matched'))
- {
- $node->setAttribute('sf_matched', true);
- $all_nodes[] = $node;
- }
- }
- }
- return $all_nodes;
- }
- protected function getElementsByTagName($nodes, $tagName, $combinator = ' ')
- {
- $founds = array();
- foreach ($nodes as $node)
- {
- switch ($combinator)
- {
- case ' ':
-
- foreach ($node->getElementsByTagName($tagName) as $element)
- {
- $founds[] = $element;
- }
- break;
- case '>':
-
- foreach ($node->childNodes as $element)
- {
- if ($tagName == $element->nodeName)
- {
- $founds[] = $element;
- }
- }
- break;
- case '+':
-
- $element = $node->nextSibling;
- if ($element && '#text' == $element->nodeName)
- {
- $element = $element->nextSibling;
- }
- if ($element && $tagName == $element->nodeName)
- {
- $founds[] = $element;
- }
- break;
- default:
- throw new Exception(sprintf('Unrecognized combinator "%s".', $combinator));
- }
- }
- return $founds;
- }
- protected function tokenize_selectors($selector)
- {
-
- $tokens = array();
- $quoted = false;
- $token = '';
- for ($i = 0, $max = strlen($selector); $i < $max; $i++)
- {
- if (',' == $selector[$i] && !$quoted)
- {
- $tokens[] = trim($token);
- $token = '';
- }
- else if ('"' == $selector[$i])
- {
- $token .= $selector[$i];
- $quoted = $quoted ? false : true;
- }
- else
- {
- $token .= $selector[$i];
- }
- }
- if ($token)
- {
- $tokens[] = trim($token);
- }
- return $tokens;
- }
- protected function tokenize($selector)
- {
-
- $tokens = array();
- $combinators = array(' ', '>', '+');
- $quoted = false;
- $token = array('combinator' => ' ', 'name' => '');
- for ($i = 0, $max = strlen($selector); $i < $max; $i++)
- {
- if (in_array($selector[$i], $combinators) && !$quoted)
- {
-
- $combinator = $selector[$i];
- while (in_array($selector[$i + 1], $combinators))
- {
- if (' ' != $selector[++$i])
- {
- $combinator = $selector[$i];
- }
- }
- $tokens[] = $token;
- $token = array('combinator' => $combinator, 'name' => '');
- }
- else if ('"' == $selector[$i])
- {
- $token['name'] .= $selector[$i];
- $quoted = $quoted ? false : true;
- }
- else
- {
- $token['name'] .= $selector[$i];
- }
- }
- if ($token['name'])
- {
- $tokens[] = $token;
- }
- foreach ($tokens as &$token)
- {
- list($token['name'], $token['selector']) = $this->tokenize_selector_name($token['name']);
- }
- return $tokens;
- }
- protected function tokenize_selector_name($token_name)
- {
-
- $quoted = false;
- $name = '';
- $selector = '';
- $in_selector = false;
- for ($i = 0, $max = strlen($token_name); $i < $max; $i++)
- {
- if ('"' == $token_name[$i])
- {
- $quoted = $quoted ? false : true;
- }
- if (!$quoted && ':' == $token_name[$i])
- {
- $in_selector = true;
- }
- if ($in_selector)
- {
- $selector .= $token_name[$i];
- }
- else
- {
- $name .= $token_name[$i];
- }
- }
- return array($name, $selector);
- }
- protected function matchMultipleCustomSelectors($nodes, $selector)
- {
- if (!$selector)
- {
- return $nodes;
- }
- foreach ($this->split_custom_selector($selector) as $selector) {
- $nodes = $this->matchCustomSelector($nodes, $selector);
- }
- return $nodes;
- }
- protected function matchCustomSelector($nodes, $selector)
- {
- if (!$selector)
- {
- return $nodes;
- }
- $selector = $this->tokenize_custom_selector($selector);
- $matchingNodes = array();
- for ($i = 0, $max = count($nodes); $i < $max; $i++)
- {
- switch ($selector['selector'])
- {
- case 'contains':
- if (false !== strpos($nodes[$i]->textContent, $selector['parameter']))
- {
- $matchingNodes[] = $nodes[$i];
- }
- break;
- case 'nth-child':
- if ($nodes[$i] === $this->nth($nodes[$i]->parentNode->firstChild, (integer) $selector['parameter']))
- {
- $matchingNodes[] = $nodes[$i];
- }
- break;
- case 'first-child':
- if ($nodes[$i] === $this->nth($nodes[$i]->parentNode->firstChild))
- {
- $matchingNodes[] = $nodes[$i];
- }
- break;
- case 'last-child':
- if ($nodes[$i] === $this->nth($nodes[$i]->parentNode->lastChild, 1, 'previousSibling'))
- {
- $matchingNodes[] = $nodes[$i];
- }
- break;
- case 'lt':
- if ($i < (integer) $selector['parameter'])
- {
- $matchingNodes[] = $nodes[$i];
- }
- break;
- case 'gt':
- if ($i > (integer) $selector['parameter'])
- {
- $matchingNodes[] = $nodes[$i];
- }
- break;
- case 'odd':
- if ($i % 2)
- {
- $matchingNodes[] = $nodes[$i];
- }
- break;
- case 'even':
- if (0 == $i % 2)
- {
- $matchingNodes[] = $nodes[$i];
- }
- break;
- case 'nth':
- case 'eq':
- if ($i == (integer) $selector['parameter'])
- {
- $matchingNodes[] = $nodes[$i];
- }
- break;
- case 'first':
- if ($i == 0)
- {
- $matchingNodes[] = $nodes[$i];
- }
- break;
- case 'last':
- if ($i == $max - 1)
- {
- $matchingNodes[] = $nodes[$i];
- }
- break;
- default:
- throw new Exception(sprintf('Unrecognized selector "%s".', $selector['selector']));
- }
- }
- return $matchingNodes;
- }
- protected function split_custom_selector($selectors)
- {
- if (!preg_match_all('/
- :
- (?:[a-zA-Z0-9\-]+)
- (?:
- \(
- (?:
- ("|\')(?:.*?)?\1
- |
- (?:.*?)
- )
- \)
- )?
- /x', $selectors, $matches, PREG_PATTERN_ORDER))
- {
- throw new Exception(sprintf('Unable to split custom selector "%s".', $selectors));
- }
- return $matches[0];
- }
- protected function tokenize_custom_selector($selector)
- {
- if (!preg_match('/
- ([a-zA-Z0-9\-]+)
- (?:
- \(
- (?:
- ("|\')(.*)?\2
- |
- (.*?)
- )
- \)
- )?
- /x', substr($selector, 1), $matches))
- {
- throw new Exception(sprintf('Unable to parse custom selector "%s".', $selector));
- }
- return array('selector' => $matches[1], 'parameter' => isset($matches[3]) ? ($matches[3] ? $matches[3] : $matches[4]) : '');
- }
- protected function nth($cur, $result = 1, $dir = 'nextSibling')
- {
- $num = 0;
- for (; $cur; $cur = $cur->$dir)
- {
- if (1 == $cur->nodeType)
- {
- ++$num;
- }
- if ($num == $result)
- {
- return $cur;
- }
- }
- }
-
- public function rewind()
- {
- reset($this->nodes);
- $this->count = count($this->nodes);
- }
-
- public function key()
- {
- return key($this->nodes);
- }
-
- public function current()
- {
- return current($this->nodes);
- }
-
- public function next()
- {
- next($this->nodes);
- $this->count --;
- }
-
- public function valid()
- {
- return $this->count > 0;
- }
-
- public function count()
- {
- return count($this->nodes);
- }
- }
Configuration
- debug
- xdebug
- logging
- cache
- compression
- tokenizer
- eaccelerator
- apc
- xcache
Request 
options:
path_info_key: PATH_INFO
path_info_array: SERVER
default_format: null
logging: '1'
relative_url_root: null
formats: { txt: text/plain, js: [application/javascript, application/x-javascript, text/javascript], css: text/css, json: [application/json, application/x-json], xml: [text/xml, application/xml, application/x-xml], rdf: application/rdf+xml, atom: application/atom+xml }
no_script_name: false
parameterHolder:
action: index
class: sfDomCssSelector
method: ''
module: sfCodeView
attributeHolder:
sf_route: 'sfRoute Object()'
Response 
status:
code: 200
text: OK
options:
http_protocol: HTTP/1.1
logging: '1'
charset: utf-8
send_http_headers: false
content_type: 'text/html; charset=utf-8'
cookies: { }
httpHeaders:
Content-Type: 'text/html; charset=utf-8'
javascripts:
'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js': { }
/sfCodeViewPlugin/js/sfCodeViewPlugin.js: { }
stylesheets:
main.css: { }
/sfCodeViewPlugin/css/sfCodeViewPlugin.css: { }
metas: { }
httpMetas:
Content-Type: 'text/html; charset=utf-8'
User 
options:
auto_shutdown: false
culture: null
default_culture: en
use_flash: true
logging: '1'
timeout: 1800
attributeHolder:
symfony/user/sfUser/attributes: { history: [sfDomCssSelector, sfDeprecatedSettingsValidation, sfDeprecatedPluginsValidation, sfDeprecatedConfigurationFilesValidation, sfDeprecatedClassesValidation, sfDefineEnvironmentConfigHandler, sfDebug, sfDateTimeFormatInfo, sfDateFormat, sfDatabaseSessionStorage] }
culture: en
Settings 
app_sfCodeViewPlugin_javascripts:
- /sfCodeViewPlugin/js/sfCodeViewPlugin.js
app_sfCodeViewPlugin_stylesheets:
- /sfCodeViewPlugin/css/sfCodeViewPlugin.css
mod_sfcodeview_enabled: true
mod_sfcodeview_view_class: sfPHP
sf_admin_module_web_dir: /sfDoctrinePlugin
sf_admin_web_dir: /sf/sf_admin
sf_app: frontend
sf_app_base_cache_dir: /www/redotheoffice/codeview/cache/frontend
sf_app_cache_dir: /www/redotheoffice/codeview/cache/frontend/dev
sf_app_config_dir: /www/redotheoffice/codeview/apps/frontend/config
sf_app_dir: /www/redotheoffice/codeview/apps/frontend
sf_app_i18n_dir: /www/redotheoffice/codeview/apps/frontend/i18n
sf_app_lib_dir: /www/redotheoffice/codeview/apps/frontend/lib
sf_app_module_dir: /www/redotheoffice/codeview/apps/frontend/modules
sf_app_template_dir: /www/redotheoffice/codeview/apps/frontend/templates
sf_apps_dir: /www/redotheoffice/codeview/apps
sf_cache: false
sf_cache_dir: /www/redotheoffice/codeview/cache
sf_charset: utf-8
sf_check_lock: false
sf_compressed: false
sf_config_cache_dir: /www/redotheoffice/codeview/cache/frontend/dev/config
sf_config_dir: /www/redotheoffice/codeview/config
sf_csrf_secret: 220ab365e581d678efc07c41371dbc49a1fdcec3
sf_data_dir: /www/redotheoffice/codeview/data
sf_debug: true
sf_default_culture: en
sf_enabled_modules:
- default
- sfCodeView
sf_environment: dev
sf_error_404_action: error404
sf_error_404_module: default
sf_error_reporting: 8191
sf_escaping_method: ESC_SPECIALCHARS
sf_escaping_strategy: true
sf_etag: false
sf_file_link_format: null
sf_i18n: false
sf_i18n_cache_dir: /www/redotheoffice/codeview/cache/frontend/dev/i18n
sf_lib_dir: /www/redotheoffice/codeview/lib
sf_log_dir: /www/redotheoffice/codeview/log
sf_logging_enabled: true
sf_login_action: login
sf_login_module: default
sf_module_cache_dir: /www/redotheoffice/codeview/cache/frontend/dev/modules
sf_module_disabled_action: disabled
sf_module_disabled_module: default
sf_no_script_name: false
sf_orm: doctrine
sf_plugins_dir: /www/redotheoffice/codeview/plugins
sf_root_dir: /www/redotheoffice/codeview
sf_secure_action: secure
sf_secure_module: default
sf_standard_helpers:
- Partial
- Cache
sf_symfony_lib_dir: /www/redotheoffice/lib/symfony/1.4/lib
sf_template_cache_dir: /www/redotheoffice/codeview/cache/frontend/dev/template
sf_test_cache_dir: /www/redotheoffice/codeview/cache/frontend/dev/test
sf_test_dir: /www/redotheoffice/codeview/test
sf_upload_dir: /www/redotheoffice/codeview/web/uploads
sf_use_database: true
sf_web_debug: true
sf_web_debug_web_dir: /sf/sf_web_debug
sf_web_dir: /www/redotheoffice/codeview/web
symfony.asset.javascripts_included: true
symfony.asset.stylesheets_included: true
Globals 
cookie:
symfony: igbg1vov0kr106fi7q336aqd75
env: { }
files: { }
get: { }
post: { }
server:
DOCUMENT_ROOT: /Library/WebServer/Documents
GATEWAY_INTERFACE: CGI/1.1
HTTP_ACCEPT: 'text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'
HTTP_ACCEPT_CHARSET: 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'
HTTP_ACCEPT_ENCODING: gzip
HTTP_ACCEPT_LANGUAGE: 'en-us,en;q=0.5'
HTTP_CACHE_CONTROL: no-cache
HTTP_CONNECTION: close
HTTP_COOKIE: symfony=igbg1vov0kr106fi7q336aqd75
HTTP_HOST: codeview.redotheoffice.com
HTTP_PRAGMA: no-cache
HTTP_USER_AGENT: 'CCBot/1.0 (+http://www.commoncrawl.org/bot.html)'
HTTP_X_CC_ID: ccc04-02
PATH: '/usr/bin:/bin:/usr/sbin:/sbin'
PATH_INFO: /sfCodeView/sfDomCssSelector
PATH_TRANSLATED: 'redirect:/www/redotheoffice/codeview/web/index.php/sfDomCssSelector'
PHP_SELF: /index.php/sfCodeView/sfDomCssSelector
QUERY_STRING: ''
REMOTE_ADDR: 38.107.179.242
REMOTE_PORT: '43684'
REQUEST_METHOD: GET
REQUEST_TIME: 1337455143
REQUEST_URI: /index.php/sfCodeView/sfDomCssSelector
SCRIPT_FILENAME: /www/redotheoffice/codeview/web/index.php
SCRIPT_NAME: /index.php
SERVER_ADDR: 192.168.0.108
SERVER_ADMIN: webmaster@weett.nl
SERVER_NAME: codeview.redotheoffice.com
SERVER_PORT: '80'
SERVER_PROTOCOL: HTTP/1.1
SERVER_SIGNATURE: ''
SERVER_SOFTWARE: 'Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8r DAV/2 PHP/5.3.6'
session:
symfony/user/sfUser/attributes: { symfony/user/sfUser/attributes: { history: [sfDeprecatedSettingsValidation, sfDeprecatedPluginsValidation, sfDeprecatedConfigurationFilesValidation, sfDeprecatedClassesValidation, sfDefineEnvironmentConfigHandler, sfDebug, sfDateTimeFormatInfo, sfDateFormat, sfDatabaseSessionStorage, sfDatabaseManager] } }
symfony/user/sfUser/authenticated: false
symfony/user/sfUser/credentials: { }
symfony/user/sfUser/culture: en
symfony/user/sfUser/lastRequest: 1337455118
Php 
php: 5.3.6
os: 'Darwin Mac-mini-van-Sjoerd-de-Jong.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386'
extensions:
54: apache2handler
33: 'apc (3.1.7)'
8: bcmath
9: bz2
10: calendar
0: 'Core (5.3.6)'
11: ctype
56: curl
1: 'date (5.3.6)'
12: 'dom (20031129)'
2: ereg
42: 'exif (1.4 $Id: exif.c 308362 2011-02-15 14:02:26Z pajoye $)'
14: 'fileinfo (1.0.5-dev)'
15: 'filter (0.11.0)'
16: ftp
17: gd
18: gettext
13: 'hash (1.0)'
20: iconv
36: imap
57: 'intl (1.1.0)'
22: 'json (1.2.1)'
23: ldap
3: libxml
24: mbstring
58: mcrypt
59: 'memcache (3.0.4)'
60: 'memcached (1.0.1)'
71: mhash
61: 'mongo (1.1.4)'
62: mssql
29: 'mysql (1.0)'
27: 'mysqli (0.1)'
26: 'mysqlnd (mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $)'
63: 'OAuth (1.0-dev)'
28: 'odbc (1.0)'
4: openssl
5: pcre
30: 'PDO (1.0.4dev)'
64: 'pdo_dblib (1.0.1)'
31: 'pdo_mysql (1.0.2)'
65: 'pdo_pgsql (1.0.2)'
32: 'pdo_sqlite (1.0.1)'
66: pgsql
55: 'Phar (2.0.1)'
34: posix
35: 'Reflection ($Revision: 307971 $)'
21: session
37: shmop
38: 'SimpleXML (0.1)'
39: soap
40: sockets
67: 'solr (0.9.11)'
19: 'SPL (0.2)'
41: 'SQLite (2.0-dev)'
6: 'sqlite3 (0.7-dev)'
25: 'standard (5.3.6)'
43: sysvmsg
44: sysvsem
45: sysvshm
46: 'tidy (2.0)'
47: 'tokenizer (0.1)'
68: 'uploadprogress (1.0.1)'
48: wddx
72: 'xdebug (2.2.0-dev)'
69: 'xhprof (0.9.2)'
49: xml
50: 'xmlreader (0.1)'
51: 'xmlrpc (0.51)'
52: 'xmlwriter (0.1)'
70: 'xsl (0.1)'
53: 'zip (1.9.1)'
7: 'zlib (1.1)'
Symfony 
version: 1.4.2-DEV
path: /www/redotheoffice/lib/symfony/1.4/lib
View Layer
Template: sfCodeView … indexSuccess.php 
Parameters:
$class (string)
$method (NULL)
$viewer (sfCodeViewer)
$history (array)
Logs
| # |
type |
message |
| 1 | sfPatternRouting | Match route "sfCodeView" (/sfCodeView/:class/:method) for /sfCodeView/sfDomCssSelector with parameters array ( 'module' => 'sfCodeView', 'action' => 'index', 'class' => 'sfDomCssSelector', 'method' => '',) |
| 2 | sfFilterChain | Executing filter "sfRenderingFilter" |
| 3 | sfFilterChain | Executing filter "sfExecutionFilter" |
| 4 | sfCodeViewActions | Call "sfCodeViewActions->executeIndex()" |
| 5 | sfPHPView | Render "sf_root_dir/plugins/sfCodeViewPlugin/modules/sfCodeView/templates/indexSuccess.php" |
| 6 | sfPHPView | Decorate content with "sf_app_dir/templates/layout.php" |
| 7 | sfPHPView | Render "sf_app_dir/templates/layout.php" |
| 8 | sfWebResponse | Send status "HTTP/1.1 200 OK" |
| 9 | sfWebResponse | Send header "Content-Type: text/html; charset=utf-8" |
Timers
| type | calls | time (ms) | time (%) |
|---|
| Configuration | 11 | 33.39 | 14 |
| Factories | 1 | 6.42 | 2 |
| Action "sfCodeView/index" | 1 | 2.08 | 0 |
| View "Success" for "sfCodeView/index" | 1 | 196.45 | 82 |
View php class code
Enter the name of a class you want to view in the toolbar and hit 'enter' to view its code, or click one of the available classes below.
User classes
- apps/frontend/config
- apps/frontend/lib
- config
- lib/form
- plugins/sfCodeViewPlugin/config
- plugins/sfCodeViewPlugin/lib
- plugins/sfCodeViewPlugin/modules/sfCodeView/actions
- plugins/sfCodeViewPlugin/modules/sfCodeView/lib
Symfony classes
- action
- addon
- autoload
- cache
- command
- config
- controller
- database
- debug
- escaper
- exception
- filter
- form/addon
- form
- generator
- i18n/Gettext
- i18n/extract
- i18n
- log
- mailer
- plugin
- request
- response
- routing
- storage
- task/app
- task/cache
- task/configure
- task/generator
- task/help
- task/i18n
- task/log
- task/plugin
- task/project
- task/project/validation
- task
- task/symfony
- task/test
- test
- user
- util
- validator/i18n
- validator
- view
- widget/i18n
- widget