如何在Laravel 5目录结构中将应用程序路径更改为api

时间:2017-02-04 16:29:37

标签: php laravel laravel-5

在Laravel 5中我想更改默认目录结构,因此api的路径我希望将其移动到. ├── app ├── bootstrap ├── config ├── database ├── public ├── resources ├── storage ├── tests └── vendor 之类的内容,我该如何实现?

示例,而不是这个结构:

.
├── api
├── bootstrap
├── config
├── database
├── public
├── resources
├── storage
├── tests
└── vendor

我想要这个:

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "Api\\": "api/"
    }
},

在我的作曲家中,我更改了名称空间,如下所示:How to change app folder name in laravel 5

[RuntimeException]                       
  Unable to detect application namespace.

但是我收到了错误:

app

2 个答案:

答案 0 :(得分:1)

好吧,过了一段时间我找到了实现这个目标的方法,在寻找其他答案后like this我发现Application::path()路径是Application::path() see the source中的硬编码}

然后我可以通过覆盖class Application extends \Illuminate\Foundation\Application { /** * Overrides the path to the application "app" directory. * * @return string */ public function path() { return $this->basePath.DIRECTORY_SEPARATOR.'api'; } } 方法来使其工作:

bootstrap/app.php

然后更新// Overrides the PATH to use api instead of app $app = new Api\Application( realpath(__DIR__.'/../') );

.
├── api
├── bootstrap
├── config
├── database
├── public
├── resources
├── storage
├── tests
└── vendor

现在我可以拥有以下结构:

<form method="get" action="in-out.htm" id="sensor_1">

		<select name="schedule" value="~maj_sensor_schedule(1)~">
		<option value="0">never</option>
		<option value="1">every 5 minutes</option>
		<option value="2">every 10 minutes</option>
		<option value="3">every 15 minutes</option>
		<option value="4">every 30 minutes</option>
		<option value="5">every hour</option>
		<option value="6">every 2 hours</option>
		<option value="7">every 4 hours</option>
		<option value="8">every 8 hours</option>
		<option value="9">every 12 hours</option>
		<option value="10">everyday</option>
		<option value="11">every week</option>
		<option value="12">every month</option>
		<option value="13">every 6 months</option>
		<option value="14">every year</option></select>
        <input src="./checked.png"onclick="document.getElementById('sensor_1').submit()" align="center" type="image">
        </form>

https://mattstauffer.co/blog/extending-laravels-application

中找到了类似的方法

答案 1 :(得分:0)

在Laravel 5.7中,您现在可以使用$app->setAppPath($path),如下所示:

$app->useAppPath(realpath(__DIR__ . '/../api'));

可以从bootstrap/app.php调用它。