Как определить путь к контроллеру в пакете Laravel - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу создать пакет с Laravel и направить мои API на контроллеры пакетов.Без их адрес папки.Поэтому мне нужно что-то вроде этого:

Route::prefix('message')->group(function () {
    Route::get('/', 'CustomMessageController@index');
});

И я нахожу что-то вроде этого:

Route::prefix('message')->group(function () {
    Route::get('/', 'Http/Controllers/CustomMessageController@index');
});

Кроме того, я хочу определить все контроллеры автоматически в методе «загрузки» ServiceProvider, но яможно найти что-то вроде этого:

$this->app->make('Devdojo\Calculator\CalculatorController');

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Вам нужно только в вашем PackageServiceProvider.php

    public function register()
    {
        include __DIR__ . '/routes.php';
    }

И конечно, route.php.

0 голосов
/ 25 апреля 2018

Через некоторое время я его нашел. Так что я делаю это:

1- Скопировать Laravel RouteServiceProvider в мой пакет

2 - переименуйте его в мое имя пакета

3 - удалите какой-нибудь непригодный метод и, наконец, мой идентификатор RouteServiceProvider, следующий за

<?php

namespace Alive2212\LaravelMessageService\Providers;

use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class AliveLaravelMessageServiceRouteServiceProvider extends ServiceProvider
{
    protected $namespace = 'Alive2212\LaravelMessageService\Http\Controllers';

    public function boot()
    {
    parent::boot();
    }

    public function map()
    {
    $this->mapApiRoutes();
    }

    protected function mapApiRoutes()
    {
    Route::prefix('alive_api')
         ->namespace($this->namespace)
         ->group(__DIR__.'/../../routes/api.php');
    }
}

4 - зарегистрируйте его в моем поставщике услуг пакетов и, наконец, мой поставщик пакетов

public function boot()
{
    $this->app->register(AliveLaravelMessageServiceRouteServiceProvider::class);
}

5- В корне пакета создайте папку 'route', создайте api.php и поместите в него несколько маршрутов:

Route::prefix('message')->group(function () {
    Route::get('/', 'CustomMessageController@index');
});

6- Создайте папку 'Http \ Controllers' в папке 'src' пакета и поместите Controller.php из проекта Laravel и создайте в нем еще один контроллер, примерно так:

namespace Alive2212\LaravelMessageService\Http\Controllers;

use Alive2212\LaravelMessageService\Http\Controllers\Controller;
use Alive2212\LaravelMessageService\Message;
use Illuminate\Http\Request;

class CustomMessageController extends Controller
{
    protected $model;

    public function __construct()
    {
    $this->model = new Message();
    }

    public function index(Request $request)
    {
        return "the is my package index controller";
    }

}

7 - после подачи проекта корректно работает адрес "localhost: 8000 / alive_api / message"

...