2017-07-25 5 views
1

Im Speicher habe ich/projects/(Name des Projekts - nicht immer das gleiche) /header.jpg und auch/projects/(Name des Projekts - nicht immer das gleiche) /home.png.Laravel symbolische Verbindung zum Speicher und zeige die Bilder

Wie kann ich sie aus meiner Sicht zeigen?

Ich erkläre es ein bisschen mehr. In der Vergangenheit habe ich Projekte auf/public/assets/img/projects und jetzt mache ich es dynamisch.

Meine Funktion die neuen Projekte zu erstellen und die Bilder zu speichern, ist dies:

public function storeProject(Request $request) 
     { 
     $project = new Project(); 
     $project->slug = $request->input("slug"); 
     $project->position = $request->input("position"); 
     $project->public = $request->input("public"); 
     $project->pathheader = $request->file('pathheader'); 
     $project->pathhome = $request->file('pathhome'); 
     \Storage::disk('projects')->makeDirectory($project->slug); 
     \Storage::disk('projects')->putFileAs($project->slug,$project->pathheader,'header.png'); 
     \Storage::disk('projects')->putFileAs($project->slug,$project->pathhome,'home.png'); 
     $project->save(); 
     return redirect('/admin/projects'); 

     } 

Die Bilder der Projekte, die ich in der Vergangenheit zeige ich es mit diesem: (I zur Ansicht übergeben die Variable $ Projekt)

<p class="lead"><img src="/assets/img/projects/{{$project->slug}}/header.jpg" width="50%" >Header</p> 
<p class="lead"><img src="/assets/img/projects/{{$project->slug}}/home.jpg" width="50%">Home</p> 

Wie werden die Bilder des Speicherordners angezeigt?

EDIT

filesystems.php Code:

'projects' => [ 
      'driver' => 'local', 
      'root' => storage_path() . '/projects', 
      'visibility' => 'public', 
     ], 

Ansicht wie folgt nun auf der Suche:

@if (Storage::disk('projects')->has($project->slug)) 
<img src="{{ asset('storage/projects/'.$project- 
>slug.'/header.jpg') }}" width="50%" > 
@else 
<p class="lead"><img src="/assets/img/projects/{{$project- 
>slug}}/header.jpg" width="50%" >Header</p> 
@endif 

ich machen:

php Handwerker Speicher: link

URL des Bildes: http://url.loc/storage/projects/hola-que-tal/header.jpg (nicht anzeigen).

+0

https://stackoverflow.com/questions/40936332/laravel-link-to-a-file-saved-in-storage-folder – Bas

+0

@Bas "Denken Sie daran, wenn Sie den lokalen Treiber verwenden, alle Dateien, die sollten Öffentlich zugänglich sein sollte im Verzeichnis storage/app/public abgelegt werden. Außerdem sollten Sie einen symbolischen Link bei public/storage erstellen, der auf das Verzeichnis storage/app/public verweist. " Nicht in storage/app/public, sie sind in/storage/projects/$ foldername (variable) –

Antwort

1

Die einfachste Lösung ist die public disk. Wenn Sie den php artisan storage:link Befehl ausgeführt können Sie den folgenden Code verwenden:

\Storage::disk('public')->makeDirectory($project->slug); 
\Storage::disk('public')->putFileAs($project->slug, $project->pathheader, 'header.png'); 
\Storage::disk('public')->putFileAs($project->slug, $project->pathhome, 'home.png'); 

Und Ihre HTML:

<p class="lead"><img src="{{ asset('storage/projects/'.$project->slug.'/header.jpg') }}" width="50%" >Header</p> 
<p class="lead"><img ssrc="{{ asset('storage/projects/'.$project->slug.'/home.jpg') }} width="50%">Home</p> 

Ein Beispiel für die Konfiguration in config/filesystems.php:

'public' => [ 
    'driver' => 'local', 
    'root' => storage_path('app/public/projects'), 
    'url' => env('APP_URL').'/storage', 
    'visibility' => 'public', 
], 

Natürlich können Sie Bearbeiten Sie Ihre projects Diskette, so dass sie die richtige root hat. Aber ich bin mir nicht sicher, wie Ihre Konfiguration für die projects Festplatte aussieht.

+0

Hallo @ Dees040 Ich kann nicht die öffentliche Festplatte verwenden, das ist ein Problem. Ich versuche etwas zu tun, vielleicht kannst du mir helfen. Ich bearbeite den unteren Teil der Frage. Wenn Sie wissen, wie man einen Chat macht, tun Sie es, wenn Sie wollen :) –

+0

Frage bearbeitet –

+0

Sie senden eine '/ {{$ Projekt-> Slug}}' buchstäblich als Zeichenfolge. Sollte dies sein: 'Storage :: disk ('projekte') -> hat ($ project-> slug)'. Aber dann überprüfen Sie, ob der Ordner existiert. Vielleicht müssen Sie auch den Dateinamen hinzufügen? Ich bin mir nicht sicher, was Sie erreichen wollen. –