Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/soberwp/controller
Composer package to enable a controller when using Blade with Sage 9
https://github.com/soberwp/controller
blade blade-template controller php sage wordpress wordpress-plugin
Last synced: about 2 months ago
JSON representation
Composer package to enable a controller when using Blade with Sage 9
- Host: GitHub
- URL: https://github.com/soberwp/controller
- Owner: soberwp
- License: mit
- Archived: true
- Created: 2017-02-16T11:45:44.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2021-05-27T14:51:06.000Z (over 3 years ago)
- Last Synced: 2024-02-15T16:32:45.283Z (10 months ago)
- Topics: blade, blade-template, controller, php, sage, wordpress, wordpress-plugin
- Language: PHP
- Homepage:
- Size: 220 KB
- Stars: 367
- Watchers: 26
- Forks: 39
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-wp-developer-tools - Controller - WordPress package to enable a controller when using Blade with Sage. (WordPress Libraries)
README
# Controller
WordPress package to enable a controller when using Blade with [Sage 9](https://roots.io/sage/) (Please note, Sage 10 uses Composers and not this package.)
* [Installation](#installation)
* [Setup](#setup)
* [Usage](#usage)
* [Overview](#overview)
* [Basic Controller](#basic-controller)
* [Using Functions](#using-functions)
* [Using Components](#using-components)
* [Inheriting the Tree/Hierarchy](#inheriting-the-treehierarchy)
* [Creating Global Properties](#creating-global-properties)
* [Advanced Custom Fields Module](#advanced-custom-fields-module)
* [Template Override Option](#template-override-option)
* [Lifecycles](#lifecycles)
* [Disable Option](#disable-option)
* [Blade Debugger](#blade-debugger)
* [Blade Coder](#blade-coder)
## Installation
### Composer:
[Sage](https://roots.io/sage/) ships with Controller. However, should you need to install, browse into the Sage theme directory and run;
```shell
$ composer require soberwp/controller:2.1.2
```### Upgrading to 2.x.x:
Please note that versions 2.x.x are newer releases than 9.x.x-beta. The 9 was used to match Sage 9 versioning at the time.
Controller 2.x.x uses [PSR4 autoloading](https://www.php-fig.org/psr/psr-4/) to load Controller classes. This is considered best practice. You will need to [update the following files](https://github.com/roots/sage/pull/2025/files) from 9.0.0-beta versions.
Folder `controllers/` changes to `Controllers/`, class file names changes to camelcase `App.php` and `FrontPage.php`. Controller namespaces changes to `namespace App\Controllers;`
### Requirements:
* [PHP](http://php.net/manual/en/install.php) >= 7.0
## Setup
By default Controller uses namespace `Controllers`.
Controller takes advantage of [PSR-4 autoloading](https://www.php-fig.org/psr/psr-4/). To change the namespace, use the filter below within `functions.php`
```php
add_filter('sober/controller/namespace', function () {
return 'Data';
});
```## Usage
### Overview:
* Controller class names follow the same hierarchy as WordPress.
* The Controller class name should match the filename
* For example `App.php` should define class as `class App extends Controller`
* Create methods within the Controller Class;
* Use `public function` to return data to the Blade views/s
* The method name becomes the variable name in Blade
* Camel case is converted to snake case. `public function ExampleForUser` in the Controller becomes `$example_for_user` in the Blade template
* If the same method name is declared twice, the latest instance will override the previous
* Use `public static function` to use run the method from your Blade template which returns data. This is useful for loops
* The method name is not converted to snake case
* You access the method using the class name, followed by the method. `public static function Example` in `App.php` can be run in Blade using `App::Example()`
* If the same method name is declared twice, the latest instance will override the previous
* Use `protected function` for internal methods. These will not be exposed to Blade. You can run them within `__construct`
* Dependency injection with type hinting is available through `__construct`The above may sound complicated on first read, so let's take a look at some examples to see how simple Controller is to use.
### Basic Controller;
The following example will expose `$images` to `resources/views/single.blade.php`
**app/Controllers/Single.php**
```php
@foreach($images as $image)
@endforeach
@endif
```
### Using Functions;
You can use static methods to run a function from within your view.
This is useful if you are within the loop and want to return data for each post item.
**app/Controllers/Archive.php**
```php
post_title;
}
}
```
**resources/views/archive.php**
```php
@extends('layouts.app')
@section('content')
@while (have_posts()) @php the_post() @endphp
{{ Archive::title() }}
@endwhile
@endsection
```
### Using Components;
You can also create reusable components and include them in any Controller class using PHP traits.
**app/Controllers/Partials/Images.php**
```php
data is set up, but before the class methods are run
}
public function __after()
{
// runs after all the class methods have run
}
```
### Disable Option;
```php
protected $active = false;
```
### Blade Debugger;
In your Blade views, `resources/views`, you can use the following to assist with debugging;
* `@debug`
* `@dump(__var__)`
### Blade Coder;
In your Blade views, `resources/views`, you can use the following to assist with jump-starting coding;
* `@code`
* `@code('__name of variable as string__')`
To wrap the code in if statements, use `@codeif`
* `@codeif`
* `@codeif('__name of variable as string__')`
## Support
* Follow [@withjacoby](https://twitter.com/withjacoby) on Twitter
* Buy me a beer or pay my rent, [paypal.me/darrenjacoby](https://paypal.me/darrenjacoby)
## Updates
* Change the composer.json version to 2.1.2
* Check [CHANGELOG.md](CHANGELOG.md) for any breaking changes before updating.
```shell
$ composer update
```