Now that we know how to create Access Control List Rules, and how to generate Admin Menu Items with Magento 2's CSFR protection, we're ready to create an MVC/MVVM URL endpoint (i.e. an HTML page) in Magento 2's admin.
astorm
In the first article of this series, we described how to create a simple MVC/MVVM endpoint in Magento 2. Implicit, but unstated, was that we were setting up an endpoint for Magento's frontend cart application. While the backend admin application uses the same MVC/MVVM/View
astorm
The Magento backend application, (sometimes called "The Admin" or adminhtml area), is where a system owner manages their Magento store. This is where users interact with web forms to add new products, change configurations, etc. Magento is a multiuser application -- i.e. a
astorm
One question I keep getting from new Magento 2 developers, (and we're all new Magento 2 developers) is, "How should I organize my project files?". Since Magento has heavily restructured code organization around Composer, it's not always clear how files should be organized
astorm
In our last article, we talked a bit about Magento 2's use of Composer, and touched on the Composer meta-package installation method. One high level take away was, when you use Composer's create-project method to start a new Magento project, you are
astorm
As Magento 2 approaches its first half-birthday, one thing is clear: Magento 2 is leaning heavily on PHP Composer for its developer workflow, and for the merchant facing Marketplace.
astorm
Last time we explored database access in Magento via creating simple Magento 2 CRUD objects, and we explored the various source files involved. While some of the window dressing has changed, Magento 1 developers probably felt right at home. Conceptually, Magento 1's Model/ResourceModel/Collection ORM
astorm
Today we're going to cover creating Magento 2 CRUD models. CRUD stands for Create, Read, Update, and Delete, and commonly refers to framework features used to read and write information to/from the underlying database without directly writing any SQL statements.
astorm
Last week we covered RequireJS, which is the foundational framework for Magento 2's modern approach to javascript. Today we're going to do the same for Magento 2's use of cascading style sheets.
astorm
Now that we've covered the basics of including javascript and CSS files in Magento 2, we're going to start exploring Magento's adoption of modern front end tools and libraries.
astorm
As promised, today we're going to show you how to add javascript and CSS files to your Magento module without needing to worry about how their paths are rendered or how Magento serves them. While you may find this article useful on its own
astorm
We interrupt your regularly scheduled Magento tutorial for a quick announcement about a new (Magento related project) I've been working on.
astorm
Last time we discussed how Magento serves and generates front end (javascript, css) files to end users from its own modules. Like most of Magento's feature, if it's done in a core module, third party developers can do it in their own modules. This
astorm
When Magento 1 was initially released, "front end development" as it exists today was barely a thing. CSS was still largely written by hand, and jQuery vs. PrototypeJS was still a legitimate question for a new software project. Magento 2 enters a world where
astorm
Today we're going to run through a basic "Hello World" example in Magento 2. We'll setup a new URL, and show you how to create a phtml template for that URL. Along the way we're going to be talking about Design Patterns™, design patterns
astorm
We're finally here. After our long path through the object manager, automatic constructor dependency injection, class preferences, argument replacement, virtual types, proxy objects and code generation, we're finally familiar enough with the object system to discuss the true replacement for Magento 1's class rewrites
astorm
It's been a long and winding road, but the end is in sight! In this, the penultimate article in our object manager tutorial, we're going to discuss working with instance and non-injectable objects in Magento 2.
astorm
With their take on an object manager/container and dependency injection, Magento have created a new way for PHP programmers to work. With that new way of working comes a new set of unanticipated challenges. Put another way, new patterns create new problems.
astorm
Last time we discussed the argument replacement feature of Magento 2's object manager, and introduced the <type/> tag in di.xml. This week we're going to talk about another feature related to argument replacement -- Virtual Types.
astorm
In the last article of our series, we covered the "class preference" feature of Magento's object manager. This week we'll cover a similar, but more selective, class replacement system built into Magento 2. While this article should be accesible as a stand-alone tutorial for
astorm