2016-03-31 19 views
2

Yardımıma ihtiyacım var.Laravel 5 Çoklu ortak klasör varlığı işlevi

Sadece bir Laravel 5.1 yüklemesinden çok siteli oluşturmak istiyorum. Alt alana bağlı olarak birden fazla .env okudum.

Ancak her sitenin kendi ortak klasörünün olmasını istiyorum. Bu klasörlerle örneğin Yani

:

-> public 
-> custom_publics 
    -> user1 
    -> user2 
    -> etc 

Ben public_path() ayarlayabilirsiniz ama asset() işlevini kullanarak bunu çalıştığınızda çalışmaz.

Örneğin: http://user2.test.on/custom_publics/user2/image.png üzerinde bir image.png var. Public_path() öğesini custom_publics/user2 olarak değiştiriyorum. Ancak, asset(image.png) numaralı telefonu arayarak bana http://user2.test.on/image.png veriyor ve mevcut değil.

http://user2.test.on/image.png'u işaret etmenin bir yolu var ama gerçekten http://user2.test.on/custom_publics/user2/image.png'a gider?

Ya da, asset() işlev yolunu nasıl ayarlayabilirim?

Kimse denedi? Herhangi bir yardım?

Saygılarımızla, Eric.

+0

Sana yardım ve bu https://laracasts.com/discuss/channels/laravel/is-it-possible-to-set- yaparsa bana bildirin düşünüyorum bu okuma denemek konusunda Farklı varlıklar-dizin –

cevap

0

Bunu potansiyel olarak çözmenin bir yolu, Apache yeniden yazmalarını kullanmaktır, böylece http://user2.test.on/image.png isteğinin gerçekte http://test.on/custom_publics/user2/image.png'a gider.

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.*)\.test\.on 
RewriteRule ^(.*)$ http://test.on/custom_publics/%1/$1 [L,NC,QSA] 

Yukarıdaki örneği, özel amacınız için değiştirmeniz gerekebilir. Buradan daha fazla bilgi için: .htaccess rewrite subdomain to directory

+0

Evet Bu cevabı biliyorum, ancak birden çok site ayarlamam gerekiyor. Tüm sitelerle bir "htaccess" oluşturamıyorum. Dinamik bir işleve ihtiyacım var –

1

Tamam, sonunda cevabı alıyorum.

böyle bir AssetsController denetleyicisi oluşturun:
<?php 

namespace app\Http\Controllers; 

use Illuminate\Support\Facades\File; 
use Illuminate\Support\Facades\Response; 
use app\Http\Controllers\Controller; 
use Redirect; 

class AssetsController extends Controller 
{ 
    /** 
    * Get asset url and return response based on file type 
    * 
    * @param $filename 
    * @return mixed 
    */ 
    public function data($filename) 
    { 
     $path = public_path().'/'; // You need to change your public path before this 
     $path = $path.$filename; 

     $file = File::get($path); 
     $type = File::mimeType($path); 

     $response = Response::make($file, 200); 
     $response->header("Content-Type", $type); 

     return $response; 
    } 

} 

Yani şimdi, ben varlık yardımcı işlevini değiştirmek gerekir.

<?php 

namespace app\Providers; 

use Illuminate\Support\ServiceProvider; 

class SitePathServiceProvider extends ServiceProvider 
{ 

    /** 
    * Indicates if loading of the provider is deferred. 
    * 
    * @var bool 
    */ 
    protected $defer = false; 

    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // 
    } 

    /** 
    * Reset asset function 
    * 
    * @param $path 
    * @return string 
    */ 
    public function asset($path) 
    { 
     return url('assets/'.$path); 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 

hüner bir rota yardımcı yapmaktır:: Ne zaman config altında sihirli Kayıt/app.php yapmak için bir ServiceProvider yarattı

Route::get('/assets/{params}', '[email protected]')->where('params', '.*'); 

Bu rota catch tüm url gibi:

http://www.example.com/assets/demo.jpg 
http://www.example.com/assets/uploads/demo.jpg 
http://www.example.com/assets/large/structure/folder/demo.jpg 

Bunun karmaşık bir şey olduğunu biliyorum, ancak bir çekicilik gibi çalışır.

Kral