Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[WIP] Add docs for ExpressionLanguage component#3044

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletionscomponents/expression_language/index.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
Expression Language
===================

.. toctree::
:maxdepth: 2

introduction
syntax
55 changes: 55 additions & 0 deletionscomponents/expression_language/introduction.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
.. index::
single: Expressions
Single: Components; Expression Language

The ExpressionLanguage Component
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

ExpressionLanguage orExpression Language? For example, I usedClass Loader and notClassLoader.

Copy link
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

I prefer ExpressionLanguage (that's also the name used in the README)

=================================

The ExpressionLanguage component provides an engine that can compile and
evaluate expressions. An expression is a one-liner that returns a value
(mostly, but not limited to, Booleans).

.. versionadded:: 2.4
The ExpressionLanguage component was new in Symfony 2.4.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

was introduced in


Installation
------------

You can install the component in 2 different ways:

* Use the official Git repository (https://github.com/symfony/expression-language);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

preach it and practice 👶

* :doc:`Install it via Composer </components/using_components>` (``symfony/expression-language`` on `Packagist`_).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

I think we should document Composer first as it is the recommended way

Copy link
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

I like it, but this means we should change it in all component docs. I'll open a ticket for it.

Copy link
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

We changed the order of these recently


Usage
-----

The ExpressionLanguage component can compile and evaluate expressions.
Expressions are one-liners which most of the time return a boolean, you can
compare them to the expression in an ``if`` statement. A simple example of an
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

you can compare them, for example, to the expression in anif statement

expression is ``1 + 2``. You can also use more complicated expressions, such
as ``someArray[3].someMethod('bar')``.

The component provides 2 ways to work with expressions:

* **compile**: the expression is compiled to PHP, so it can be cached and
evaluated;
* **evaluation**: the expression is evaluated without being compiled to PHP.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

i miss a bit some text saying for what purposes or use cases (at least examples of them) is compile used over evaluation and the other way around. And also how ExpressionLanguage component is plugged into Symfony so that enables further use cases. That is something that will make things like this documentation make a lot more sense.


The main class of the component is
:class:`Symfony\\Component\\ExpressionLanguage\\ExpressionLanguage`::

use Symfony\Component\ExpressionLanguage\ExpressionLanguage;

$language = new ExpressionLanguage();

echo $language->evaluate('1 + 2'); // displays 3

echo $language->compile('1 + 2'); // displays (1 + 2)

Expression Syntax
-----------------

See ":doc:`/components/expression_language/syntax`" to learn the syntax of the
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

syntax used with

ExpressionLanguage component.

.. _Packagist: https://packagist.org/packages/symfony/expression-language
98 changes: 98 additions & 0 deletionscomponents/expression_language/syntax.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
.. index::
single: Syntax; ExpressionLanguage

The Expression Syntax
=====================

The ExpressionLanguage component uses a specific syntax which is based on the
expression syntax of Twig. In this document, you can find all supported
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

extra comma can be removed

syntaxes.

Supported Literals
~~~~~~~~~~~~~~~~~~

The component supports:

* **strings** - single and double quotes (e.g. ``'hello'``)
* **numbers** - e.g. ``103``
* **arrays** - using twig notation (e.g. ``[1, 2]``)
* **hashes** - using twig notation (e.g. ``{ foo: 'bar' }``)
* **booleans** - ``true`` and ``false``
* **null** - ``null``

Supported Operators
~~~~~~~~~~~~~~~~~~~

The component comes with a lot of operators:

Arithmetic Operators
....................

* ``+`` (addition)
* ``-`` (subtraction)
* ``*`` (multiplication)
* ``/`` (division)
* ``%`` (modulus)
* ``**`` (pow)

Assignment Operators
....................

* ``=``

Bitwise Operators
.................

* ``&`` (and)
* ``|`` (or)
* ``^`` (xor)

Comparison Operators
....................

* ``==`` (equal)
* ``===`` (identical)
* ``!=`` (not equal)
* ``!==`` (not identical)
* ``<`` (less than)
* ``>`` (greater than)
* ``<=`` (less than or equal to)
* ``>=`` (greater than or equal to)
* ``matches`` (regex match)

.. tip::

To test if a string does *not* match a regex, use the logical ``not``
operator in combination with the ``matches`` operator::

$language->evaluate('not "foo" matches "/bar/"'); // returns true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

are we allowed to place also () to group expressions? just curious


Logical Operators
.................

* ``not`` or ``!``
* ``and`` or ``&&``
* ``or`` or ``||``

String Operators
................

* ``~`` (concatenation)

Array Operators
...............

* ``in`` (contain)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

contains

* ``not in`` (does not contain)

Numeric Operators
.................

* ``..`` (range)

Ternary Operators
.................

* ``foo ? 'yes' : 'no'``
* ``foo ?: 'no'`` (equal to ``foo ? foo : 'no'``)
* ``foo ? 'yes'`` (equal to ``foo ? 'yes' : ''``)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

is this also true in twig, interesting, never knew elvis operator had another version

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

as of Twig 1.12, it is supported

However, in the ExpressionLanguage component, the implicit else value isnull, not the empty string

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

shouldn't it be null on evaluation and '' on compilation maybe? just saying

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

nope. The compilation and the evaluation are producing the same result (after evaluating the compiled code).
And these shortcuts are handled by the parser, not by the evaluator or the compiler.

Using an empty string i the doc is because it was written before changing it tonull (the initial code was copied from Twig which uses an empty string)

1 change: 1 addition & 0 deletionscomponents/index.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,6 +13,7 @@ The Components
dom_crawler
dependency_injection/index
event_dispatcher/index
expression_language/index
filesystem
finder
form/index
Expand Down
5 changes: 5 additions & 0 deletionscomponents/map.rst.inc
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -57,6 +57,11 @@
* :doc:`/components/event_dispatcher/generic_event`
* :doc:`/components/event_dispatcher/immutable_dispatcher`

* :doc:`/components/expression_language/index`

* :doc:`/components/expression_language/introduction`
* :doc:`/components/expression_language/syntax`

* **Filesystem**

* :doc:`/components/filesystem`
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp