AthenaeumAthenaeum
Packages
  • next
  • current
  • v9.x
  • v8.x
  • v7.x
  • v6.x
  • v5.x
  • v4.x
  • v3.x
  • v2.x
  • v1.x
Changelog
GitHub
Packages
  • next
  • current
  • v9.x
  • v8.x
  • v7.x
  • v6.x
  • v5.x
  • v4.x
  • v3.x
  • v2.x
  • v1.x
Changelog
GitHub
  • Version 5.x

    • Release Notes
    • Upgrade Guide
    • New to this...
    • Origin
  • ACL

    • Introduction
    • How to install
    • Setup
    • Permissions
    • Roles
    • Users
    • Cached Permissions
  • Circuits

    • Circuits
    • How to install
    • Setup
    • Usage
    • Events
  • Collections

    • Collections
    • How to install
    • Summation

      • Summation Collection
      • Items Processor
  • Config

    • Configuration Loader
    • How to install
    • Setup
    • Load Configuration Files
    • Custom File Parsers
  • Console

    • Command and Schedule Registration
    • How to install
    • Setup
    • Commands
    • Schedules
  • Container

    • IoC Service Container
    • How to install
    • Container
    • List Resolver
  • Core

    • Athenaeum Core Application
    • Prerequisite
    • How to install
    • Integration
    • Usage

      • Configuration
      • Service Providers
      • Service Container
      • Events
      • Caching
      • Logging
      • Console
      • Task Scheduling
      • Exception Handling
      • Extending Core Application
      • Testing
  • Database

    • Introduction
    • How to install
    • Models

      • Instantiatable
      • Sluggable
    • Query

      • Criteria (Query Filter)
  • Dto

    • Data Transfer Object (DTO)
    • How to install
    • Create Interface
    • Implement DTO
    • How to use
    • Populate
    • Export
    • Json
    • Serialization
    • Nested DTOs
    • Array DTO
  • Events

    • Register Listeners and Subscribers
    • How to install
    • Setup
    • Listeners
    • Subscribers
  • Filters

    • Search Filter Utilities
    • Prerequisites
    • How to install
    • Setup
    • Processor
    • Filters Builder
    • Predefined Resources

      • Search Processor
      • Sorting Processor
      • Constraints Processor
      • Matching Processor
    • Tip: Create a base builder
  • Http

    • Clients

      • Http Clients
      • How to install
      • Setup
      • Basic Usage
      • Available Methods

        • Fluent Api
        • Protocol Version
        • Base Uri
        • Http Method and Uri
        • Headers
        • Accept & Content-Type
        • Authentication
        • Http Query
        • Payload Format
        • Payload
        • Attachments
        • Cookies
        • Response Expectations
        • Middleware
        • Conditions
        • Criteria
        • Redirects
        • Timeout
        • Debugging
        • Logging
        • Driver Options
        • Driver
      • Http Query Builder

        • Introduction
        • Select
        • Where
        • Dates
        • Include
        • Pagination
        • Sorting
        • Raw Expressions
        • Custom Grammar
    • Cookies

      • Http Cookies
      • How to install
      • Usage
    • Messages

      • Http Messages
      • How to install
      • Serializers
  • Properties

    • Properties Overload
    • How to install
    • Usage
    • Naming Convention
    • Properties Visibility
  • Redmine

    • Redmine Api Client
    • How to install
    • Setup
    • General Usage

      • Supported Operations
      • Fetch list of resources
      • Find
      • Fetch
      • Create new record
      • Update existing record
      • Delete existing record
      • Relations
    • Available Resources

      • Predefined Resources
      • Attachments
      • Enumerations
      • Issue Relations
      • Users
      • User Groups
      • Roles
      • Project Memberships
      • Versions (Milestones)
      • Issue Categories
      • Trackers
  • Service

    • Service Registrar
    • How to install
    • How to use
  • Support

    • Introduction
    • How to install
    • Laravel Aware-of Helpers

      • How to use
      • Enforce Via Interface
      • Custom Default
      • Pros and Cons
      • Available Helpers
    • Aware-of Properties

      • Generator
      • Available Aware-of Helpers
    • Live Templates
  • Testing

    • Introduction
    • How to install
    • Test Cases
    • Testing Aware-of Helpers
  • Utils

    • Introduction
    • How to install
    • Array
    • Duration
    • Json
    • Math
    • Method Helper
    • Populatable
    • Version
  • Validation

    • Introduction
    • How to install
    • Setup
    • Rules

      • Alpha-Dash-Dot
You are viewing documentation for an outdated version. It is no longer supported!

Athenaeum Core Application

The Athenaeum Core Application is a custom implementation of Laravel's \Illuminate\Contracts\Foundation\Application. It is intended to bring some of Laravel's services and components into your legacy application. It offers the following features:

  • Registration and booting of Service Providers
  • Laravel's Service Container
  • Laravel's Configuration Repository
  • Laravel's Event Dispatcher
  • Laravel's Cache Repository
  • Laravel's Console Application (lightweight version of Artisan)
  • Exception Handling (optional)

Please read the "Motivation" and "Limitations" section before continuing. However, if you are entirely new to Laravel and have little experience working with it's Application and Services, then please start by reading the newcomer chapter.

Motivation

Despite your best intentions, it might not be possible to make use of the entire Laravel framework, when dealing with legacy applications. For whatever reasons, you may have to continue development of new features in an outdated system. Ultimately, you may wish to start from scratch and make use of all the tools and frameworks you desire. This may even prove to be the best choice in the long run. Unfortunately, such a choice isn't always available, and you have to make due with whatever you have. In other words, at the end of the day, you still have to get the job done.

Nevertheless, to make some tasks easier, perhaps you choose to make due with a few of Laravel's packages. But when a few packages (or services) become a handful, then it can become somewhat tricky or cumbersome trying to setup those services, when you lack Laravel's native mechanisms; the ability to register and boot service providers.

This package was created to offer such a mechanism, in hopes that it can bridge the gab between you legacy application and some of Laravel's packages. However, you must understand that it is not a replacement for Laravel framework!

Why not include the entire Framework?

Should you be able to include the entire Laravel Framework in your vendor, and you are able to achieve your goals within your legacy application, then please do so. Laravel is incredible powerful. If you spend enough time reviewing it's source code, you might be surprised just how flexible it actually is. Consequently, if such a choice is available to you, then you shouldn't have any need for this package.

Regardless, please bare in mind that no framework can solve every kind of problem or challenge. Nor would it be fair, to demand it's authors and contributes to solve all of your challenges, when dealing with legacy applications. Not even this package will be able to solve all problems. It only offers a "minimum" set of functionality, hopefully allowing you to bring some of Laravel's capabilities, services and components into your legacy application. How you choose to make use of it, if at all, is entirely up to you.

Limitations

When comparing this package's deliverables, with the application offered by Laravel, it has an abundance of limitations. To illustrate some of these limitations, consider the following major unsupported features:

No Http Request / Response Support

Presumably your legacy application already has it's own way of dealing with Http Requests and Responses. Trying to redesign your application to support a different request and response mechanism, might prove to be very difficult, when the architecture is already established. Therefore, this application does not offer any support for such. In other words, it does not impose you to change your already established request and response handling.

No Frontend Support

For the same reasons as Http Request / Response handling, no frontend related features are directly offered. This means that Blade isn't directly supported.

No Database Support

Most legacy applications already have some kind of database abstraction layer. Perhaps PDO or mysqli is used directly. Regardless of such, redesigning your entire database abstraction layer can be extremely overwhelming and perhaps also ill advised. As such, Eloquent is not directly support by this application. Yet, should you still desire to attempt incorporating Eloquent into your legacy application, then please read Laravel's documentation.

Other Limitations

The reason why the Athenaeum Core Application is able to provide some support for Laravel's services (packages), is because it implements the \Illuminate\Contracts\Foundation\Application interface. This provides some of the compatibility. But it's implementation differs from that of Laravel's. For this reason, you should expect it's behaviour to be vastly different. It is not able to support all features, that you otherwise would expect from Laravel's application.

Alternatives

Laravel Framework or Lumen

Given the line of argumentation already provided, if may seem redundant to state Laravel Framework or Lumen as alternatives (E.g. you may not have this choice available). Yet, this cannot be emphasised enough: continuing to add features into a legacy application will increase complexity. Integrating this package into your legacy application will most certainly bring unforeseen challenges. Therefore, when mentioning Laravel (or Lumen) as a possible alternative, try to think about your challenge in a different way. Perhaps you can extract those "new" features out of your legacy application, by offering them via an API or microservice. If this is possible for you, then Laravel or Lumen are good alternatives to consider.

Other Frameworks

There are many other PHP frameworks. Some are lightweight, whilst others are large-scale. Some are easy to master, and some are a bit more cumbersome to learn. The point is, you should know that there are many different types of frameworks available. Each having it's own strengths and weaknesses. Perhaps one of those frameworks can be integrated directly into your legacy application, and fulfill some of your needs, without causing too many changes. In any case, it is worth taking some time researching what features other frameworks offer, and what requirements they impose.

Edit page
Last Updated: 05/04/2022, 21:01
Contributors: Alin Eugen Deac
Next
Prerequisite