Ad

Basic Laravel / Programming Questions

- 1 answer

I'm trying to structuring my app right and have some trouble with loading class.

So my first question is: the ServiceProviders are just to bind the interfaces, right?

How can i do, that my class is loaded when app is booted.

To be more specific, i try to include the Shortcode logic of Pingpong Sky: http://sky.pingpong-labs.com/docs/2.0/shortcode

What i've done now is to make a folder Shortcodes and put there:

<?php namespace Modules\Account\Shortcodes;

use Shortcode;

class AccountsShortcode
{
   public function register($attr, $content = null, $name = null)
    {
        $text = Shortcode::compile($content);
        return '<div'.HTML::attributes($attr).'>'. $text .'</div>';
     }
}


Shortcode::register('accounts', 'AccountsShortcode');

I tried also to add the folder in the PSR-4 autoload, but it doesn't work.

I alreay have a middleware:

<?php namespace Modules\Page\Http\Middleware;

use Closure;
use Shortcode;

class PageMiddleware
{
    /**
     * Run the request filter.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response   = $next($request);
        $response->setContent(Shortcode::compile($response->original));
        return $response;
    }
}

And this part works.

So, where do i need to put the Shortcode definition code, how can make that it is loaded and what is a good way to structure it?

Ad

Answer

Based on the namespace you've shown, I'm assuming you're using Pingpong Modules package, as well. If this is the case, after a cursory glance at their documentation, I believe this is what you need to do:

First, create your short code class. Based on the information you've provided, you need to create this class at modules/Account/Shortcodes/AccountsShortcode.php:

<?php

namespace Modules\Account\Shortcodes;

use Shortcode;

class AccountsShortcode
{
   public function register($attr, $content = null, $name = null)
    {
        $text = Shortcode::compile($content);
        return '<div'.HTML::attributes($attr).'>'. $text .'</div>';
     }
}

Next, use your module's service provider to register your shortcode to your shortcode class. In modules/Account/Providers/AccountServiceProvider.php, update the register() method to register your shortcode:

public function register()
{
    // you can add "use" statements at the top if you'd like to clean this up
    \Shortcode::register('accounts', \Modules\Account\Shortcodes\AccountsShortcode::class);
}

Finally, run a composer dump-autoload to make sure the autoloader knows about your new directory and classes.

Ad
source: stackoverflow.com
Ad