Php 拉维尔环境

Php 拉维尔环境,php,laravel,laravel-4,environment,Php,Laravel,Laravel 4,Environment,我对Laravel 4.2中的环境感到非常困惑。我已在/config文件夹中设置了我的环境文件夹。我接着补充说: $env = $app->detectEnvironment(array( 'production' => array('my-server-name'), 'local' => array('my-local-name') )); 其中my server name和my local name通过运行hostname从终端获取 然而,当我这样做时,

我对Laravel 4.2中的环境感到非常困惑。我已在
/config
文件夹中设置了我的环境文件夹。我接着补充说:

$env = $app->detectEnvironment(array(
    'production' => array('my-server-name'),
    'local' => array('my-local-name')
));
其中
my server name
my local name
通过运行
hostname
从终端获取


然而,当我这样做时,无论我在哪里运行代码,环境总是
生产环境
。我做错了什么?

我认为您没有正确使用
detectEnvironment
。在这个函数中,您应该根据配置文件或外部环境变量返回所使用的环境,而不是获取环境。如果您愿意,您将看到一些关于如何正确使用
detectEnvironment
的示例,包括配置文件或外部变量(例如,在命令行设置环境变量
MY\u LARVEL\u ENV=local
,并使用
$\u SERVER['MY\u LARAVEL\u ENV']
在函数内部,以返回正确的环境。

在laravel项目的开始阶段,根和所有这些东西可能会非常混乱,因此我建议您遵循本教程

https://github.com/JeffreyWay/Laravel-4-Generators
在cmd上转到项目的根目录并按照步骤操作,准备好后,只需键入:

php artisan generate:scaffold theNameOfYourTable
说是的!
它将为您创建所有的te MVC、播种机、项目标准和一些其他优秀员工。

环境的关键在于您定义不同的配置文件并设置所有环境。然后,Laravel将找出代码运行的位置,并运行正确的配置。如果我告诉它我在哪里跑步,那有什么意义?我不想更改我的文件,但当我推进到我的产品时,关键是,
detectEnvironment
告诉它您正在运行的环境,并且
App::environment()
允许您稍后访问它,并相应地配置不同的行为/服务器/连接字符串。您仍然可以决定是在本地运行,还是在生产中运行。您希望应用程序如何知道哪个是哪个?将其视为一个
if
子句:
if(hostname==“xyz”)返回“production”;否则返回“本地”-您仍然需要提供“xyz”以使其准确。OP的代码在我看来还行。您参考的同一文档还提供了
$env=$app->detectEnvironment(array('local'=>array('your-machine-name'))作为示例。我以前也这样定义过我的Laravel环境,所以我确认它可以完成。你的代码总是返回“local”,就像他总是返回“production”。检测在哪里?你必须有一个本地和非其他地方的定义(在配置或
.environment
文件中)。如果你跟踪
$app->detectEnvironment()
,你将在
照明\基础\环境检测器
类中访问
detectWebEnvironment()
。在这里,您将看到它检查您的参数是闭包还是数组。如果您使用闭包,它将按照您提到的方式运行(文档中的第二个示例)。如果放入数组,它将根据实际主机名(文档中的第一个示例)检查数组值,并返回键作为Laravel环境名称。看起来您的
local
主机名是错误的。确保
local
正确无误。如果主机名与您当前的计算机不匹配,laravel始终返回
production
。是的,您是对的,因此主机名最后有一个
.local
,即使在终端中
主机名
没有显示
.local
。我只是追溯了
detectEnvironment()
并找到了它。