我的应用程序已在生产服务器和我的开发机器上成功运行了一年多(两者都运行IIS而没有任何漂亮的URL)。昨天我将最新的一系列(直到现在成功的)更新从开发转移到了生产,从那时起,许多路由都在生产服务器上失败,即使它们在dev上工作正常。我已经验证两台计算机上都存在完全相同的应用程序和路由文件,我已经确认php artisan routes
在两台计算机上都生成相同的输出,我已经确认了他们的autoload_classmap。 php文件是相同的,我已经验证两台服务器都在运行Laravel 4.1.23。
经过一些测试后,看来,例如,URL https://localhost/EPHY/index.php/child/3958/edit
会在dev上触发ChildController::edit()
RESTful方法,会在生产时触发ChildController::create()
,然后崩溃,因为它可以&# 39;找到它所期望的familyId参数。这是两台服务器上的routes.php中的适用行:
Route::resource( 'child', 'ChildController', array(
'create' => 'child.create',
'store' => 'child.store',
'show' => 'child.show',
'edit' => 'child.edit',
'update' => 'child.update',
'destroy' => 'child.destroy'
));
我应该注意,另一个RESTful资源Family在两台服务器上都能成功运行,但其他人并不知情。在做了一些更多测试之后,实际上看起来任何与模型有关的模型与家庭有雄辩的关系都失败了,其他所有工作都正常。这很奇怪......
任何人都可以提出可能导致这种情况的原因,或者至少我能看到的地方?我很乐意发布更多信息。
更新:我继续探讨这个问题,而且很明显,这肯定只会影响与家庭模型具有雄辩关系的模型相关的路线;应用程序中的所有其他路径似乎都正常工作。
答案 0 :(得分:0)
好吧,我想出来了,这很蹩脚。如上所述,这仅影响与Family
具有雄辩关系的模型。在实践中,这意味着相关::create()
的所有Controllers
方法都需要Family::id
值。所以,这是我正在检查的代码,确定我是否需要Input::get()
或Input::old()
的值:
$ familyId =(空(输入:: old()))? Input :: get('familyId'):Input :: old('family_id');
有人看到问题吗? empty()
无法将函数调用作为参数。一旦我将代码更改为:
$familyId = ( Input::old() )? Input::old('family_id') : Input::get('familyId') ;
现在,我是怎么想出来的?好吧,花了一天半的时间假设我知道“不能在写入上下文中使用函数返回值”意味着,我最终检查了GOOGLE上的DAMN错误消息!让这成为一个教训新手和退伍军人的提醒,永远不要假设你理解错误意味着什么,如果没有与groupmind仔细检查......
我很惭愧......