2015-04-27 132 views
2

我將Laravel 5項目部署到共享主機帳戶,將應用程序文件放在www文件夾之外,只將公用文件夾放在www文件夾內。所有喜歡這裏解釋的,在最佳答案:Laravel 4 and the way to deploy app using FTP ...無3.因爲此文件不存在Laravel 5Laravel 5共享主機 - 錯誤的public_path()

現在,當我打電話public_path()控制器內我得到的東西像我-appfiles-outside-of-www/public而不是www/public。有誰知道我爲什麼沒有在這裏找到正確的道路?我能改變這個地方嗎? 謝謝!

回答

4

您可以使用容器覆蓋public_path。 實施例:

App::bind('path.public', function() { 
    return base_path().'/public_html'; 
}); 
+0

你能告訴我該把這段代碼放在哪裏嗎? – johnnydoe82

+1

服務proivder是更好的方式來做到這一點,我認爲 – mcklayin

+0

上面哪個文件代碼被放置,請發佈完整的解決方案 – Marwan

2

有一些解決方案,如改變的index.php或接受一個與IOC容器。 Laravel 5 change public_path()

爲什麼比其他解決方案更好:

效果最好,在我看來,該解決方案,在這太問題描述?因爲它適用於普通的http請求,所以使用artisan並使用phpunit進行測試!例如。對index.php的更改僅適用於http請求,但在使用PHPunit時導致失敗(在我的情況下:文件(...)未在資產清單中定義)。

該溶液的簡短概括: 第1步:在文件:引導/改變app.php $應用變量的從第一聲明:

$app = new Illuminate\Foundation\Application(
    realpath(__DIR__.'/../') 
); 

到:

$app = new App\Application(
    realpath(__DIR__.'/../') 
); 

這指向您自己的自定義應用程序類,我們將在步驟2中創建它。

第2步:在應用程序文件夾中創建文件Application.php:

<?php namespace App; 

class Application extends \Illuminate\Foundation\Application 
{ 
    public function publicPath() 
    { 
     return $this->basePath . '/../public_html'; 
    } 
} 

請務必根據您的需求更改路徑。該示例假設的目錄結構如下所示:
°°laravel_app
°°°°應用
°°°°引導
°°°°配置
°°°°...
°°的public_html


在OP的情況下,路徑可能應該

return $this->basePath . '/../www/public'; 

(從laravel_app上來,然後下到www/public)