Open Source eCommerce Platform on Symfony

Overview

Sylius is an Open Source eCommerce platform on top of Symfony.

The highest quality of code, strong testing culture, built-in Agile (BDD) workflow and exceptional flexibility make it the best solution for applications tailored to your business requirements. Powerful REST API allows for easy integrations and creating unique customer experience on any device.

We're using full-stack Behavior-Driven-Development, with phpspec and Behat.

Enjoy being an eCommerce Developer again!

⚙️ Installation

Install Sylius with Composer (see requirements details).

Follow the Getting started with Sylius tutorial!

📖 Documentation

Documentation is available at docs.sylius.com.

🤝 Community

Get Sylius support on Slack, Forum or Stack Overflow.

Stay updated by following our Twitter and Facebook.

Would like to help us and build the most developer-friendly eCommerce platform? Start from reading our Contributing Guide!

👮 Security issues

If you think that you have found a security issue in Sylius, please do not use the issue tracker and do not post it publicly. Instead, all security issues must be sent to [email protected].

📦 Plugins and Extensions: Sylius Store

You can find Sylius plugins on our Sylius Store which is a Marketplace with Sylius extensions.

Or search for packages marked as sylius-plugin on Packagist.

Sylius Plus

Sylius Plus gives you all the power of Open Source and much more. It comes with the following set of enterprise-grade features:

  • Advanced Multi-store
  • Returns Management
  • Multi-source Inventory
  • Advanced Users Permissions
  • Partial Order Fulfillment
  • Loyalty

What is more, Sylius Plus means SLA-backed support and Project Success Assistance from its creators. Learn more.

📃 License

Sylius is completely free and released under the MIT License.

✍️ Authors

Sylius was originally created by Paweł Jędrzejewski.

Kudos to all Sylius contributors 🙏

... and others!

See the full list of contributors from our awesome community.

Comments
  • [WIP] Sylius payum integration

    [WIP] Sylius payum integration

    The PR attempt to integration payum into sylius e-commerce. Currently it contains two examples. First is offsite payment (paypal express checkout was used) and second credit card payment (stripe via omnipay bridge was used).

    Integration

    I briefly describe integration steps required. Check Files Changes for more details.

    1. Add payum's lib to composer.json and install them
    2. Update PaymentMethods. Remove all exist and add Stripe and Payal EC.
    3. Add PurchaseStep to checkout scenario.
    4. Configure payum

    Order <-> Payment details relation problem

    We should definitely discuss the order <-> payment details relation problem.

    Clarification:

    Payum does not provide unified payment model in any way. All of them payment specific, do not share any interfaces or parent classes. For paypal rest situation even better: we reuse their official model that comes with paypal/rest-api-sdk. The bridge for jms plugings works with its PaymentInstruction model. Omnipay does not provide any model yet.

    How I solve it in customers projects:

    We have Order to PaymentDetails realtion (Order is owning side). Let's say one-to-one. PaymentDetails model implements class table inheritance pattern. There should be a way to dynamiclly add new classes to the map. I think it is possible with metadata doctrine event. I used this strategy in several projects: works fine but I doubt it is the best solution for the e-comerrace platform.

    Solution:

    I added details property to Paymnet model (and its iterface). The details contains simple array. This way we do not need any extra models and can reuse current code. Payum native and omnipay's gateways have to work fine with this solution where jms plugins not.

    Moving payum related code to a bundle

    What about moving all payum related stuff to payment bundle? or even better create one SyliusPayumBundle. It will contains all integration details.

    Solution:

    Moved.

    Credit card processing questions?

    Where to ask for credit card (if it is required)? It could be asked on payment method selection method (after user choose one) or inside CaptureOrderWithXXXAction.

    Note: Since it is proof of concept everybody are welcome to discuss\criticize\ask about this PR. I am looking forward to get your feedback.

    Solution:

    It is asked on the separate page only if payment require it.

    TODO (maybe not in this PR (: )

    • Fallback payments
    • Simplify storages configurations
    • Offline payments
    • Allow set custom status for dummy payments.
    • Design for credit card page.
    Enhancement 
    opened by makasim 78
  • [RFC] Introducing components

    [RFC] Introducing components

    Hey folks! This is a big one, so please fasten your seatbelts.

    I'd like to extract everything not symfony-specific into standalone components. I don't think I have to explain the idea, because it's exactly the same thing as with Symfony. Library + bundle, which is integration layer with the framework.

    I'll start with 1 fun fact about this idea... I already did it, twice.

    First, in quite early stages of development, when Sylius had much less features than now. I reverted this, because I had a feeling that the components were very, very small and simply not useful for anything else than Symfony2 bundles.

    Second, it was not so long time ago, but before the reorganization of repositories on github. We had around ~20 (or even more) active bundles, so the change resulted in 40 repositories to maintain/fork/track issues and so on... it was a bit painful to manage, believe me.

    With our current github structure and use of subtree split, it's super simple to do and manage. I created bash scripts for subtree splits and tagging releases, so it's just matter of adding new repos to the list.

    Now, I want to do this third and last time. :)

    Pros & Why...

    • It always felt to me like the right and natural way to develop app, without coupling to the framework and generally, avoiding the strict coupling with anything whenever possible.
    • Allows for wider adoption and more collaboration. This is the most important point for me. I've already heard few voices from the Laravel community about porting Sylius there. While my personal and professional choice is Symfony2, I don't see a reason why people could not benefit from our ideas/libraries using different frameworks. "It's an implementation details!" to quote two very smart guys.
    • Most of the code used by developers will live in components, the bundles will be only for configuration and services definition, so there is no problem with remembering what comes from bundle and what from library.
    • I dream about Drupal and Sylius integration. This should make it at least a bit simpler.
    • I don't like where we're going with ResourceBundle (being central bundle for other ones, doing quite a lot more than 1 thing it was supposed to provide - resource management)
    • Makes the bundles lighter and doing only what the should do.
    • (good read) http://williamdurand.fr/2013/08/07/ddd-with-symfony2-folder-structure-and-code-first/
    • (good read) http://richardmiller.co.uk/2013/06/18/symfony2-bundle-structure-bundles-as-integration-layers-for-libraries/

    Cons...

    • It means 2x more repositories and composer packages, but well, I'd say it's not a very big problem with our current github organization.
    • It may look a bit more complex for newcomers, but when you get the idea, it can be simpler to learn, because you can dive in the components without the need to learn Symfony & Sylius all at once.
    • Quite a lot of the Sylius "coolness" comes from the Symfony flexibility (tagged services, very good doctrine integration and so on), so I don't know how easy it will be to use our components with other frameworks. (because I have never used them, so this is just my little concern coming from lack of knowledge)

    Problems to tackle during the change...

    The extraction of components itself will be pretty simple, but there are some questions.

    1. Where should we put the doctrine mappings? Libraries or bundles?
    2. I'm on the edge with models. I'm pretty sure that we'll end up putting them in the components, but I'd like to hear your opinion. Models represent the business domain, so it does not feel entirely right to have them "so far away" from the application source code. (in the component) On the other hand, Sylius components would be slightly different (not in all, but most cases) from other php libraries, because they do not necessarily belong to low level (framework) like Finder or HttpKernel components from Symfony.
    3. With this reorganization, I have this idea of simplifying the namespaces. I'm not entirely convinced yet, but what do you think about these proposals?

    Sylius\\Bundle\\FooBundle\\ Sylius\\Component\\Foo\\

    or

    Sylius\\FooBundle\\ Sylius\\Foo\\

    or leaving the component.

    Sylius\\FooBundle\\ Sylius\\Component\\Foo

    Reason is simple, TaxationBundle already contains the "bundle" suffix, so there will be no conflicts / confusion. And it makes things shorter.

    What do you think?

    /cc @weaverryan (we talked several times about it, I hope you're proud I finally wrote this RFC :D)

    RFC 
    opened by pjedrzejewski 66
  • Install Fails

    Install Fails

    I am facing a failed install while I follow the instructions at http://sylius.org/get-started :

    php app/console sylius:install Installing Sylius... Step 1 of 4. Checking system requirements. +-------------------------------+----------------------------------------------- ----------------------+ | Issue | Recommendation | +-------------------------------+----------------------------------------------- ----------------------+ | short_open_tag | | | session.auto_start | | | sylius.extensions.accelerator | Install and enable a PHP accelerator like APC (highly recommended). | +-------------------------------+----------------------------------------------- ----------------------+ Success! Your system can run Sylius properly.

    Step 2 of 4. Setting up the database. Creating Sylius database for environment dev. The command terminated with an error code: 1. [Exception] The command terminated with an error code: 1.

    ................................................................................. Few things does not work as is :

    config_dev.yml uses #dbname: %sylius.database.name%_dev dbname: %sylius.database.name% so it would work with what I typed in CLI inputs then I got error like [Symfony\Component\Debug\Exception\ContextErrorException] Warning: ini_set(): A session is active. You cannot change the session modu le's ini settings at this time So I had to change config.yml

    session: ~

    session: storage_id: session.storage.php_bridge handler_id: ~ And finally I am getting an error code 1 and no tables installed, this is a pitty, I am trying to test this promising eshop framework ! I tried multiples times with or with -s dev, no way...

    Here are some log events I get : [2015-07-21 17:51:59] translation.WARNING: Translation not found. {"id":"sylius.settings","domain":"requirements","locale":"en_US"} [] [2015-07-21 17:51:59] translation.DEBUG: Translation use fallback catalogue. {"id":"sylius.settings.on","domain":"requirements","locale":"en_US"} [] [2015-07-21 17:51:59] translation.DEBUG: Translation use fallback catalogue. {"id":"sylius.settings.off","domain":"requirements","locale":"en_US"} [] ....... and the last ones before terminal terminated : [2015-07-21 17:51:59] php.DEBUG: "Symfony\Component\Console\Helper\TableHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\Table" instead. {"type":16384,"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Component\Console\Helper\HelperSet.php","line":86,"level":4352} [] [2015-07-21 17:51:59] event.DEBUG: Notified event "console.terminate" to listener "Symfony\Bundle\SwiftmailerBundle\EventListener\EmailSenderListener::onTerminate". [] [] [2015-07-21 17:51:59] event.DEBUG: Notified event "console.command" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure". [] [] [2015-07-21 17:52:00] doctrine.DEBUG: SHOW DATABASES [] [] [2015-07-21 17:52:00] php.DEBUG: "Symfony\Component\Console\Helper\ProgressHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\ProgressBar" instead. {"type":16384,"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Component\Console\Helper\HelperSet.php","line":84,"level":4352} [] [2015-07-21 17:52:00] event.DEBUG: Notified event "console.command" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure". [] [] [2015-07-21 17:52:00] event.DEBUG: Notified event "console.terminate" to listener "Symfony\Bundle\SwiftmailerBundle\EventListener\EmailSenderListener::onTerminate". [] [] [2015-07-21 17:52:00] event.DEBUG: Notified event "console.terminate" to listener "Symfony\Bundle\SwiftmailerBundle\EventListener\EmailSenderListener::onTerminate". [] [] [2015-07-21 17:52:00] event.DEBUG: Notified event "console.terminate" to listener "Symfony\Bundle\SwiftmailerBundle\EventListener\EmailSenderListener::onTerminate". [] [] [2015-07-21 17:52:00] php.CRITICAL: Uncaught Exception: The command terminated with an error code: 1. {"type":1,"file":"E:_projects\symfony\sylius-standard\vendor\sylius\sylius\src\Sylius\Bundle\InstallerBundle\Command\CommandExecutor.php","line":81,"level":16383,"stack":[{"file":"E:_projects\symfony\sylius-standard\vendor\sylius\sylius\src\Sylius\Bundle\InstallerBundle\Command\AbstractInstallCommand.php","line":122,"function":"runCommand","class":"Sylius\Bundle\InstallerBundle\Command\CommandExecutor","type":"->","args":["doctrine:database:create",[]]},{"file":"E:_projects\symfony\sylius-standard\vendor\sylius\sylius\src\Sylius\Bundle\InstallerBundle\Command\InstallDatabaseCommand.php","line":50,"function":"runCommands","class":"Sylius\Bundle\InstallerBundle\Command\AbstractInstallCommand","type":"->","args":[["doctrine:database:create","doctrine:schema:create","cache:clear","doctrine:phpcr:repository:init"],"[object](Symfony\Component\Console\Input\ArrayInput: "sylius:install:database" --no-debug=1 --env=dev)","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Component\Console\Command\Command.php","line":259,"function":"execute","class":"Sylius\Bundle\InstallerBundle\Command\InstallDatabaseCommand","type":"->","args":["[object](Symfony\Component\Console\Input\ArrayInput: "sylius:install:database" --no-debug=1 --env=dev)","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php","line":886,"function":"run","class":"Symfony\Component\Console\Command\Command","type":"->","args":["[object](Symfony\Component\Console\Input\ArrayInput: "sylius:install:database" --no-debug=1 --env=dev)","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php","line":195,"function":"doRunCommand","class":"Symfony\Component\Console\Application","type":"->","args":["[object](Sylius\Bundle\InstallerBundle\Command\InstallDatabaseCommand: {})","[object](Symfony\Component\Console\Input\ArrayInput: "sylius:install:database" --no-debug=1 --env=dev)","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Console\Application.php","line":96,"function":"doRun","class":"Symfony\Component\Console\Application","type":"->","args":["[object](Symfony\Component\Console\Input\ArrayInput: "sylius:install:database" --no-debug=1 --env=dev)","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php","line":126,"function":"doRun","class":"Symfony\Bundle\FrameworkBundle\Console\Application","type":"->","args":["[object](Symfony\Component\Console\Input\ArrayInput: "sylius:install:database" --no-debug=1 --env=dev)","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\sylius\sylius\src\Sylius\Bundle\InstallerBundle\Command\CommandExecutor.php","line":74,"function":"run","class":"Symfony\Component\Console\Application","type":"->","args":["[object](Symfony\Component\Console\Input\ArrayInput: "sylius:install:database" --no-debug=1 --env=dev)","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\sylius\sylius\src\Sylius\Bundle\InstallerBundle\Command\InstallCommand.php","line":48,"function":"runCommand","class":"Sylius\Bundle\InstallerBundle\Command\CommandExecutor","type":"->","args":["sylius:install:database",[],"[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Component\Console\Command\Command.php","line":259,"function":"execute","class":"Sylius\Bundle\InstallerBundle\Command\InstallCommand","type":"->","args":["object","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php","line":886,"function":"run","class":"Symfony\Component\Console\Command\Command","type":"->","args":["object","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php","line":195,"function":"doRunCommand","class":"Symfony\Component\Console\Application","type":"->","args":["[object](Sylius\Bundle\InstallerBundle\Command\InstallCommand: {})","object","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Console\Application.php","line":96,"function":"doRun","class":"Symfony\Component\Console\Application","type":"->","args":["object","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php","line":126,"function":"doRun","class":"Symfony\Bundle\FrameworkBundle\Console\Application","type":"->","args":["object","[object](Symfony\Component\Console\Output\ConsoleOutput: {})"]},{"file":"E:_projects\symfony\sylius-standard\app\console","line":17,"function":"run","class":"Symfony\Component\Console\Application","type":"->","args":["object"]}]} []

    Any idea on how I can install and try sylius please ?

    Potential Bug 
    opened by dmidz 55
  • [RFC] Sylius statuses

    [RFC] Sylius statuses

    Hi,

    Here is a table with common workflows for ecommerce: https://github.com/Sylius/Sylius/wiki/Status

    The aim is to defined accurately all statuses before implementing them in Sylius.

    Ref discussion: https://github.com/Sylius/Sylius/pull/899#issuecomment-33338336

    RFC 
    opened by winzou 55
  • Components, II attempt

    Components, II attempt

    • [x] tag all bundles
    • [x] review all bundles' composer.json
    • [x] review all components' composer.json
    • [x] review all bundles' CHANGELOG
    • [x] review all components' CHANGELOG
    • [x] rename Payments to Payment on packagist and github
    • [x] rename Promotions to Promotion on packagist and github
    • [x] rename Taxonomies to Taxonomy on packagist and github
    Enhancement 
    opened by pjedrzejewski 51
  • [POC] UiBundle and AdminBundle

    [POC] UiBundle and AdminBundle

    Hello folks!

    I'd like to start a discussion about the required changes to SyliusWebBundle. This PR shows the direction I want to move towards. Let me know what do you think. This is a result of plenty thoughts and discussion but I will try to summarize the most important reasons:

    • We don't have time and don't want to maintain a very custom admin interface

    Yeah. We need to be realistic about how much work it is to build a nice theme. I don't think we have that many frontend devs in the community and definitely not enough time. So I want to avoid as much as possible work here. AdminLTE sounds like a perfect solution here.

    • AdminLTE is MIT licensed, based on Bootstrap and available via Bower.

    MIT license - perfect. Based on Bootstrap - perfect, easy to use and everyone knows it, even for backend developers, who don't enjoy fighting with html/css too much. Available via Bower - awesome, we don't have to commit it to the repository.

    • AdminLTE has plenty of components/widgets ready - My POC is super, super simple, but the package has plenty of examples and ready to use templates - just have a look here - https://almsaeedstudio.com/preview. It will be very easily customizable!
    • Fully responsive backend out-of-the-box. Yeps, pretty much without any effort, the backend will be really responsive and mobile friendly. What we have now is far from perfect and would require great deal of work.

    OK, this is about AdminLTE - I hope everyone is convinced that this is the right choice. I was considering Materialize, but tried it and it requires much more work, pretty much the same as our current custom Bootstrap backend. AdminLTE has more out-of-the-box than we could implement in next 3-6 months.


    What's up with the AdminBundle and UiBundle? Goals:

    • Decouple Administration panel from the shop frontend

    There are projects already which use Sylius as API and backend. We don't want to force anyone to include whole bundle with the frontend if he is not using it. Also, it allows for a nice and clean separation of Admin panel and Shop frontend. (yes, next step is ShopBundle and removing WebBundle :D)

    • Allow to reuse Sylius UI and simpler installation of standalone bundles

    There is plenty of projects which use just selected bundles. Would be great if they could benefit from using Sylius UI. Also, some macros/buttons/widgets/menus/forms could be shared between bundles. Right now there is no easy way to do that, that's why I come up with the idea of SyliusUiBundle. It will contain all the AdminLTE integration stuff and common templating tools.

    This will also ease the setup of individual bundles. There is no easy way now to try out some bundles. You need to copy templates or write them from scratch. With Grids (see next point) and UiBundle - that will be much much easier. In few lines, you will get a basic admin panel with nice ui in few lines of yml.

    • Grids and maintenance of templates

    Not many of you know this, but we have http://docs.sylius.org/en/latest/bundles/SyliusGridBundle/index.html in works. It has been tested in a quite big project and works really well. It is not an admin generator, but follow the path that I took with ResourceBundle - having simple, configurable/resuable Crud controllers. This bundle basically adds a system of filters and grid rendering on top of SyliusResourceBundle.

    The problem we have right now that there is huuuge duplication of templates in our backend. With grids, combined with SyliusUiBundle, we could remove 80% of our templates and make it much easier to customize Sylius backend. Adding new columns and filters will not require any html/css.

    • Opportunity to clean up things

    Reducing amount of templates - big plus. It is also an opportunity to rework some stuff (like menu builders in this PR and translation keys).

    I know that sylius_backend_tax_category_index and sylius_admin_tax_category_index are very similar, but I think that using Admin in all templates, routes etc. will make it easier for us to maintain everything admin and super simple for newcomers to understand. We got used to this "backend" thing, but Admin is more obvious.

    Woah, this got pretty long. Let me hear your thoughts.

    Last important note - the battle plan:

    I learned the hard way to not rework everything at once. :) Idea for implementing that is to merge AdminBundle and UiBundle in the form I am proposing here (after review) and then wait for the Resource+Grids improvements to continue working on it. We would migrate resources one by one to the new backend with grids, filters and generated templates/routing. At one point, we would be left with only shop frontend in WebBundle. This would allow us to remove it in favor of new ShopBundle, which would contain the shop itself. (here there is much more work)

    Sorry for any typos and rambling, it was late. ;)

    RFC 
    opened by pjedrzejewski 50
  • [WIP] Adding confirmation modal

    [WIP] Adding confirmation modal

    I added confirmation modal based on bootstrap modal, it is applied on the delete button (defined in the button macro). For now, it miss the translations.

    Enhancement 
    opened by arnolanglade 49
  • [SyliusApiBundle] Api-Calls bypasses token based authentication and always redirects to /connect

    [SyliusApiBundle] Api-Calls bypasses token based authentication and always redirects to /connect

    As described in the API-related Docs for Authentication, everything works fine when it comes to register a new api client and to retrieve an access token for an existing user.

    Anyway, it is not possible to execute any API-call with the access_token passed as "Authentication"-Header. Every api call will be responded with a 301-redirect to the /connect-Route, which offers 3 links to connect with amazon, google and facebook and which seems to come from HWI-OAuth-Bundle. Also it does not matter weather an Authentication-Header is passed or not or if it contains valid characters or not.

    While investigating this issue i stumbled upon this question at stackoverflow which describes nearly the same behaviour.

    I also tried this out with a completely new sylius installation based on 0.17.0.

    Steps to reproduce:

    I. api client creation with all grant types:

    php app/console sylius:oauth-server:create-client --grant-type="password" --grant-type="refresh_token" --grant-type="token" Output:

    A new client with public id 1vfmrpbwbkjooksgwo0s8sowck08skww4o8o0c4ccgg88o04sw, secret 22oew12ifockko4skogw0kc80g0084w8s8swock0kocccg8scc has been added

    II. retrieve access token

    curl http://www.example.dev/oauth/v2/token \
        -d "client_id"=1vfmrpbwbkjooksgwo0s8sowck08skww4o8o0c4ccgg88o04sw \
        -d "client_secret"=22oew12ifockko4skogw0kc80g0084w8s8swock0kocccg8scc \
        -d "grant_type"=password \
        -d "username"[email protected] \
        -d "password"=example
    
    

    This is a valid user which is able to being logged in. More concretely this user is the admin user which was created at the installation process of sylius.

    Output:

    {"access_token":"OWY5MjZhMzdlMzc0ZTBiMWIyMTQzMjdiMTFlOTI5NzBiYmFjYzYwZTEyMGU1NmZhZTViMjY5OThmYmY3NGIzNw","expires_in":3600,"token_type":"bearer","scope":null,"refresh_token":"ZjBiOTkwZjFjMjA4M2NjYzRmZDhjM2Q5NzdmYjE1MDA1MGE5N2ZjY2UxYTJmZmI5NmEwNzBjOTAyMTQ4N2I5Ng"}

    III. use the access token for any api request:

    curl http://www.example.dev/api/users -H "Authorization: Bearer OWY5MjZhMzdlMzc0ZTBiMWIyMTQzMjdiMTFlOTI5NzBiYmFjYzYwZTEyMGU1NmZhZTViMjY5OThmYmY3NGIzNw" The Response is a redirect 301 to the http://www.example.dev/connect

    This is my security.yml:

    # This file is part of the Sylius package.
    # (c) Paweł Jędrzejewski
    
    security:
        providers:
            sylius_user_provider:
                id: sylius.user_provider.name_or_email
        encoders:
            Sylius\Component\User\Model\UserInterface: sha512
        firewalls:
            administration:
                switch_user: true
                context:     user
                pattern:     /administration/.*
                form_login:
                    provider:     sylius_user_provider
                    login_path:   /administration/login
                    check_path:   /administration/login-check
                    failure_path: /administration/login
                    default_target_path: /administration/dashboard
                    use_forward:  false
                    use_referer:  true
                logout:
                    path:   /administration/logout
                    target: /administration/login
                anonymous: true
    
            main:
                switch_user: { role: ROLE_SYLIUS_ADMIN }
                context:     user
                pattern:     /.*
                form_login:
                    provider: sylius_user_provider
                    login_path: /login
                    check_path: /login_check
                    failure_path: /login
                    default_target_path: /
                    use_forward:  false
                    use_referer: true
                remember_me:
                    key: %sylius.secret%
                    name: APP_REMEMBER_ME
                    lifetime: 31536000
                    always_remember_me: true
                    remember_me_parameter: _remember_me
                oauth:
                    resource_owners:
                        amazon:   "/login/check-amazon"
                        facebook: "/login/check-facebook"
                        google:   "/login/check-google"
                    login_path:   /connect
                    failure_path: /connect
                    oauth_user_provider:
                        service: sylius.oauth.user_provider
                logout: true
                anonymous: true
    
            dev:
                pattern:  ^/(_(profiler|wdt)|css|images|js)/
                security: false
    
        access_control:
            - { path: ^/api, role: ROLE_API }
            - { path: ^/login.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/connect.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    
            - { path: ^/administration/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/administration/login-check, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: "/administration.*", role: ROLE_ADMINISTRATION_ACCESS }
    
            - { path: "/account.*", role: ROLE_USER }
    
            - { path: "/_partial.*", ip: 127.0.0.1 }
    
    

    And the roles of the user are:

    a:2:{i:0;s:9:"ROLE_USER";i:1;s:8:"ROLE_API";}

    Potential Bug Documentation 
    opened by itinance 44
  • Sylius search

    Sylius search

    Hello Guys,

    This is my initial pull request for the Sylius search feature as outlined on https://github.com/Sylius/Sylius/issues/1583

    Within SearchBundle there is a README file with a few instructions on how to use the bundle. This explains the notion of the finder and how it can be used optionally with facets for different situations such as a front-end category page, the main search results page or through the backend interface.

    At this time I have implemented support for small applications using ORM (mysql actually) and larger ones with ElasticSearch. It should be easy to add more engines in future.

    There are a few TODO comments in the code mentioning our decisions and what can be changed in the future, but I'm hoping for some feedback and guidance first.

    Videos created for demo purposes: http://youtu.be/mACQeN1UNzQ http://youtu.be/XBfxdrlQyzM

    Regarding Behat tests there are 2 modes, one for mysql and one for elastic search. Keep that in mind when you want to run them.

    screenshot 2014-08-12 15 20 58

    screenshot 2014-08-12 15 56 39

    Enhancement 
    opened by agounaris 44
  • Improved products page (backend)

    Improved products page (backend)

    Want to make the products page to show more useful information. Still trying to avoid adding page specific style if possible. (use purely Bootstrap)

    Before:

    screen shot 2013-11-25 at 9 35 23 pm

    After

    screen shot 2013-11-25 at 9 19 57 pm

    Questions

    1. Does master variant suppose to have stock on hand? Isn't it just a group?
    2. What is the best way to add a new string? (sylius.product.updated_at for example)
    3. Should we remove the edit and delete button? Should leave some space for users to add their own column (brand etc)
    4. How do you want to change this page?
    Enhancement 
    opened by kayue 43
  • [MediaBundle][RFC] Add SyliusMediaBundle with CMF Media integration

    [MediaBundle][RFC] Add SyliusMediaBundle with CMF Media integration

    | Q | A | | --- | --- | | Bug fix? | no | | New feature? | yes | | BC breaks? | yes | | Deprecations? | no | | Fixed tickets | #496 | | License | MIT | | Doc PR | - |

    This work is still in progress so there's no need for a code review yet ;) But I wanted to share my progress so you can provide me with good suggestions.

    Checklist

    • [x] Integrating CMF Media
    • [x] Use CMF\Image in Taxon (Entity, FormTypes and templates)
    • [x] Use CMF\Image in Taxonomy (Entity, FormTypes and templates)
    • [x] Use CMF\Image in Product Variant (Entity, FormTypes and templates)
    • [ ] Write specs/tests

    Extra Checklist

    • [ ] Add elFinder bundle for media management
    • [ ] Implement ajax upload

    UPDATE

    How it works? In many cases we need our entities to have images and we want to use CMF Images. The problem is that you cannot directly reference a document (from Phpcr) in a entity (e.g. OneToMany).

    Using SyliusMediaBundle you can easily reference a Cmf Media Image document from an ORM Entity. A common solution is to store that document's ID in a column ($mediaIdof your entity) and have another (non-mapped) property on your entity ($media) to store the actual CMF document. Then on appropriate Doctrine events (prePersist, preUpdate, postLoad) you can load $media using $mediaId and vice-versa (change $mediaId based on current $media)

    What SyliusMediaBundle offers is an entity called Image which you can easily reference as you would do (OneToMany, etc.) and render that field using sylius_image in your forms. SyliusMediaBundle will internally handle the syncing and store that image in Phpcr using CMF Media.

    I tried to come with simplest and cleanest solution so instead of using ReferencesExtension from StofDoctrineExtensions I've created a thin Doctrine listener to handle the syncing.

    Any idea about how can we do it better is very much appreciated :) ?!

    RFC 
    opened by aramalipoor 42
  • Change taxons new end point

    Change taxons new end point

    | Q | A | |-----------------|--------------------------------------------------------------| | Branch? | 1.13 | | Bug fix? | no | | New feature? | yes | | BC breaks? | no| | Deprecations? | no | | Related tickets | jira | | License | MIT |

    API 
    opened by everwhatever 0
  • [docs] updated doc on how to choose the correct branch to start a new…

    [docs] updated doc on how to choose the correct branch to start a new…

    … patch

    | Q | A | |-----------------|--------------------------------------------------------------| | Branch? | 1.11, 1.12 or 1.13 | | Bug fix? | no | | New feature? | no | | BC breaks? | no | | Deprecations? | no | | Related tickets | #14679 | | License | MIT |

    opened by alejgarciarodriguez 0
  • [Docs] Instructions for submitting a patch are not clear

    [Docs] Instructions for submitting a patch are not clear

    Sylius docs version: 1.13 / latest

    Description According to the instructions in the current version (1.13) of the codebase, it seems that we should begin our new feature or bug fix from the master branch. This looks outdated, as there is no master branch now. Should it be from last versioned branch right? e.g. 1.13.

    Link to docs

    opened by alejgarciarodriguez 0
  • [UX] Fix cart button on small screens

    [UX] Fix cart button on small screens

    | Q | A | |-----------------|--------------------------------------------------------------| | Branch? | 1.11 | | Bug fix? | yes | | New feature? | yes? | | BC breaks? | no | | Deprecations? | no | | Related tickets | fixes #14229 | | License | MIT |

    Clicking the cart button when the screen cannot accommodate the popup will now redirect to the cart instead of throwing a console error and doing nothing.

    UX Shop Bug 
    opened by NoResponseMate 0
  • [Maintenance] Remove Doctrine's LifecycleEventArgs deprecations

    [Maintenance] Remove Doctrine's LifecycleEventArgs deprecations

    | Q | A | |-----------------|--------------------------------------------------------------| | Branch? | 1.12 | | Bug fix? | no | | New feature? | no | | BC breaks? | no | | Deprecations? | no | | Related tickets | #14661 | | License | MIT |

    opened by NoResponseMate 0
  • Make getMessages method from EmailChecker public

    Make getMessages method from EmailChecker public

    | Q | A | |-----------------|--------------------------------------------------------------| | Branch? | 1.13 | | Bug fix? | no | | New feature? | yes | | BC breaks? | no | | Deprecations? | no | | License | MIT |

    We should probably make this method public to allow to check what messages contains even inside tags, which is impossible in hasMessageTo() method becouse of strip_tags() usage

    Feature DX 
    opened by TheMilek 0
Releases(v1.12.1)
Owner
Sylius eCommerce
We catalyze trade with technology
Sylius eCommerce
Shopware 6 is an open source ecommerce platform based on a quite modern technology stack that is powered by Symfony and Vue.js.

Shopware 6 Realize your ideas - fast and without friction. Shopware 6 is an open source ecommerce platform based on a quite modern technology stack th

Shopware 2.1k Dec 31, 2022
Sylius is an Open Source eCommerce platform on top of Symfony.

Sylius is an Open Source eCommerce platform on top of Symfony. The highest quality of code, strong testing culture, built-in Agile (BDD) workflow and

Sylius eCommerce 7.2k Jan 5, 2023
Payu payment gateway for bagisto laravel ecommerce open source platform

Bagisto Payu Payment Gateway Payu is a popular payment gateway in india. This package provides a additional strong help for the user to use the payu p

Saju G 3 Dec 14, 2021
Simple Ecommerce Platform on Symfony - E-Learning

Simple Ecommerce Platform on Symfony - E-Learning

Vincent Manuceau 1 May 8, 2022
Size chart plugin for Sylius ecommerce platform.

Madcoders Sylius Size Chart Plugin Features upload size chart files (for example for shoes, t-shirts and similar products) match size charts by rules

MADCODERS 4 Oct 29, 2021
A free open source e-commerce platform for online merchants based on customised version of Laravel.

A free open source e-commerce platform for online merchants based on customised version of Laravel.

Ace Vinayak 58 Oct 19, 2022
GetCandy is an open source E-commerce platform which embraces Laravel

GetCandy is an open source E-commerce platform which embraces Laravel as it's foundation and uses it to build a highly extensible, robust and feature rich application you can build any store on.

GetCandy 16 Jun 15, 2022
PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

PrestaShop is an Open Source e-commerce web application, committed to providing the best shopping cart experience for both merchants and customers. It is written in PHP, is highly customizable, supports all the major payment services, is translated in many languages and localized for many countries, has a fully responsive design (both front and back office), etc. See all the available features.

PrestaShop 6.9k Dec 31, 2022
PrestaShop module that allows an ecommerce/brand to display its physical retailers in a map

PrestaShop module that allows an ecommerce/brand to display its physical retailers in a map Features Free of charge: instead of using pa

Darío Scattolini 3 Apr 15, 2022
Antvel is an ecommerce project written in Laravel 5.* intended for building a friendly eStore either for startups or big companies.

Antvel is an ecommerce project written in Laravel 5.* intended for building a friendly eStore either for startups or big companies.

Antvel - Official 650 Dec 28, 2022
A Free and Opensource Laravel eCommerce framework built for all to build and scale your business.

Bagisto is a hand tailored E-Commerce framework built on some of the hottest opensource technologies such as Laravel (a PHP framework) and Vue.js a progressive Javascript framework.

Bagisto 5k Jan 5, 2023
Ecommerce website for Sales of Product according to their categories and Tags with pictures

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Muhammad Fahad 1 Nov 8, 2021
Laravel eCommerce headless APIs allow you to experience seamless and easily scalable storefront performance.

Bagisto GraphQL API Laravel eCommerce headless APIs allow you to experience seamless and easily scalable storefront performance. An open-source and Gr

Bagisto 30 Dec 29, 2022
(Live Link) Extensive ecommerce site with vendors, mods & ability to add to cart without being logged in. Upgraded to Laravel 8.x

(Live Link) Extensive ecommerce site with vendors, mods & ability to add to cart without being logged in. Upgraded to Laravel 8.x

null 14 Dec 21, 2022
The Laravel eCommerce DHL Shipping module module calculates the shipping rates based on DHL API for product shipping.

Introduction DHL Shipping Add-on provides DHL Shipping methods for shipping the product. It packs in lots of demanding features that allows your busin

Bagisto 1 May 31, 2022
The Laravel eCommerce Image Gallery allows the admin to add/manage images into various galleries and galleries into various groups according to requirements.

The Laravel eCommerce Image Gallery allows the admin to add/manage images into various galleries and galleries into various groups according to requirements.

Bagisto 2 May 31, 2022
The Laravel eCommerce Mollie Payment Gateway allows the merchants to integrate Mollie payment gateway to their bagisto Store.

The Laravel eCommerce Mollie Payment Gateway allows the merchants to integrate Mollie payment gateway to their bagisto Store.

Bagisto 2 May 31, 2022
Laravel eCommerce Pre Order Extension allows the customers and guest users to pre-order the upcoming product and out of stock products.

Introduction Bagisto Pre-order add-on allows the customer to pre-order products which are not yet available at the online store. With the help of Bagi

Bagisto 3 May 31, 2022
This is a ecommerce project with some basic features.

Getting Started First, clone the repository: git clone https://github.com/MdMostaFizurRahaman/ecommerce.git There are two part of this application. Ba

Md Mostafizur Rahman 25 Dec 19, 2022