Php 如何在Laravel包中定义控制器路径

Php 如何在Laravel包中定义控制器路径,php,laravel,laravel-5,php-packages,Php,Laravel,Laravel 5,Php Packages,我想用Laravel创建一个包,并将我的API路由到包控制器。没有他们的文件夹地址。 所以我需要这样的东西: Route::prefix('message')->group(function () { Route::get('/', 'CustomMessageController@index'); }); Route::prefix('message')->group(function () { Route::get('/', 'Http/Controllers/

我想用Laravel创建一个包,并将我的API路由到包控制器。没有他们的文件夹地址。 所以我需要这样的东西:

Route::prefix('message')->group(function () {
    Route::get('/', 'CustomMessageController@index');
});
Route::prefix('message')->group(function () {
    Route::get('/', 'Http/Controllers/CustomMessageController@index');
});
$this->app->make('Devdojo\Calculator\CalculatorController');
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";
    }

}
我有这样的想法:

Route::prefix('message')->group(function () {
    Route::get('/', 'CustomMessageController@index');
});
Route::prefix('message')->group(function () {
    Route::get('/', 'Http/Controllers/CustomMessageController@index');
});
$this->app->make('Devdojo\Calculator\CalculatorController');
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";
    }

}
此外,我想在ServiceProvider“boot”方法中自动定义所有控制器,但我可以找到如下内容:

Route::prefix('message')->group(function () {
    Route::get('/', 'CustomMessageController@index');
});
Route::prefix('message')->group(function () {
    Route::get('/', 'Http/Controllers/CustomMessageController@index');
});
$this->app->make('Devdojo\Calculator\CalculatorController');
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";
    }

}
谢谢。

过了一会儿我找到了。 因此,我这样做:

1-将Laravel RouteService Provider复制到我的包中

2-将其重命名为我自己的包名

3-删除一些不可用的方法和最终我的RouteServiceProvider id如下

<?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');
    }
}
5-在包的根目录中创建“route”文件夹,创建api.php并将一些路由放入其中:

Route::prefix('message')->group(function () {
    Route::get('/', 'CustomMessageController@index');
});
6-将文件夹“Http\Controllers”创建到包的“src”文件夹中,并从Laravel项目中放入Controller.php,然后在其中创建另一个控制器,如下所示:
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-在serve项目之后,“localhost:8000/alive_api/message”地址可以正常工作

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

当然还有routes.php。

“您不应该尝试在register方法中注册任何事件侦听器、路由或任何其他功能。”我认为这与非包服务提供商有关。这是发布路线的旧方法。也许现在的替代方案是使用映射。