2016-07-02 5 views
0

Ich benutze Codeigniter-Framework für ein Projekt, das ich habe, aber ich habe ein kleines Problem, das ich nicht lösen kann. Ich möchte css styling und js scripts von den Ansichten trennen, also habe ich sie in getrennten Ordnern,/css und/js, beide sind im Ordner Vermögenswerte, die im Stammordner meines Projekts ist. Die Gesamtstruktur ist wie folgt:Wie routen Anfragen im Codeigniter, so dass wir statische CSS, JS und IMG-Dateien bereitstellen können?

/Projekt-Ordner

----/Anwendung

----/System

----/Vermögen

- -------/css

--------/js

---- index.php

Jetzt habe ich einen Controller namens MyLibrary, der eine Methode namens newentry hat, die beim Aufruf die newentry-Ansicht lädt.

<?php 
class MyLibrary extends CI_Controller 
{ 
    public function newentry() 
    { 
    //The upload form 
    $this->load->view('newentry'); 
    } 
} 

Die newEntry Ansicht ist ein einfaches Upload-Formular, das eine style.css und script.js für Styling und Validierung etc. verwendet ... Ich bin die base_url() -Methode des codeigniter mit dem Pfad und Dateinamen enthalten der oben genannten Dateien.

<html> 
<head> 
    <link rel="stylesheet" type="text/css" href="<?php echo base_url();?>assets/css/style.css"> 
    <title><?php echo $title; ?></title> 
</head> 

<body> 
<form class = "dropezone" action = 'upload' method = 'POST' enctype = 'multipart/form-data'> 
    <input type="file" name="document" /> 
    <input type="submit"/> 
</form> 
</body> 
</html> 

Diese Linie ist, wo ich ein Problem haben: href = "assets/css/style.css">

die erzeugte Zeichenfolge ist der richtige Weg, das heißt localhost/Projektname/assets/css/styles.css jedoch wird die Anfrage an diese uRL gemacht:

http://localhost/project-name/MyLibrary/localhost/test-pages/assets/css/style.css 

was natürlich nicht, wo die Dateien sind. Weiß jemand, warum passiert das?

Auch, wie Sie das beheben? sollte ich eine Route von Hand hinzufügen? Wenn ja, wie wird ein Controller erstellt, der statische Dateien bereitstellt?

+0

Ist 'base_url' in' config.php' gesetzt? – DFriend

+0

Ja, es ist so eingestellt: $ config ['base_url'] = 'localhost/test-pages /'; – hanix

+0

Versuchen Sie das Protokoll zu base_url wie folgt hinzuzufügen: '$ config ['base_url'] = 'http: // localhost/test-pages /';' – DFriend

Antwort

0

ich herausgefunden haben, warum der Antrag nicht auf die korrekte URL gemacht wurde. Also nein, es geht nicht darum, das Protokollschema hinzuzufügen. It has to do with how user agents calculate the base url. Lassen Sie mich erklären:

Wenn wir ein Link-Tag in HTML verwenden, geben wir das href-Attribut, das ein URI ist. Jetzt, wenn es ein absoluter Pfad ist, gibt es kein Problem, die Ressource wird nur abgerufen, aber es gibt ein kleines Problem mit relativen Pfaden, wie dem, den ich benutze. Sie sehen, der User-Agent oder der Browser ist programmiert, dass href auf eine Basis-URL anhängen und es gibt verschiedene Möglichkeiten, wie sie diese Basis-URL zu berechnen, here's what W3C has to say:

Benutzerprogramme den Basis-URI für die Lösung relativ berechnen müssen URIs nach [RFC1808], Abschnitt 3. Im Folgenden wird beschrieben, wie [RFC1808] gilt speziell für HTML.

Benutzerprogramme müssen die Basis URI entsprechend die folgenden Präzedenzen (höchste Priorität zum niedrigsten) berechnen:

  1. die Basis-URI von dem Basiselement festgelegt ist.
  2. Der Basis-URI wird durch Metadaten angegeben, die während einer Protokollinteraktion entdeckt wurden, z. B. ein HTTP-Header (siehe [RFC2616]).
  3. Standardmäßig ist der Basis-URI der des aktuellen Dokuments. Nicht alle HTML-Dokumente verfügen über einen Basis-URI (z. B. kann ein gültiges HTML-Dokument in einer E-Mail als erscheinen und darf nicht durch einen URI gekennzeichnet sein). Solche HTML-Dokumente werden als fehlerhaft angesehen, wenn sie relative URIs enthalten und sich auf einen Standardbasis-URI verlassen.

so die Lösung einfach genug war, nachdem diese Passage lesen, ich hatte gerade die Basis-URL angeben, verwendet werden soll, in dem HTML-Dokument mit dem Basis-Tag, wie folgt aus:

<html> 
    <head> 
     <title>Home Page - wellcom</title> 
     <base href = "<?php echo base_url(); ?>"> 
     <link rel="stylesheet" type="text/css" href="assets/css/style.css"> 
    </head> 

    <body> 
     <h3>HANIX</h3> 
    </body> 
</html> 

und es funktionierte wie Magie.

Wie auch immer, danke für Ihre Antworten, ich hoffe, diese Antwort wird für andere hilfreich sein.

0

Versuchen Sie Ihren Stylesheet Link auf diese Weise

<link rel="stylesheet" href="<?php echo base_url('assets/css/style.css');?>"> 
Verwandte Themen