2017-08-25 3 views
0

Ich bin neu in Lumen. Ich begann Lumen unter Mac OS zu verwenden und es in einem Andock-Container auszuführen.Nur die App-Version mit Lumen POST API Anruf

Die App Service im dockerfile ist wie folgt:

app: 
build: 
    context: ./ 
    dockerfile: app.dockerfile 
working_dir: /var/www 
volumes: 
    - ./:/var/www 
environment: 
    - "DB_PORT=3306" 
    - "DB_HOST=database" 

Der MySQL-Dienst ist perfekt und läuft. Beim Öffnen http://localhost:9002 kann ich die normale Lumen App Versionierung sehen:

Lumen (5.4.6) (Laravel Components 5.4.*) 

Jetzt habe ich einen API-Endpunkt für einfache SMS gemacht anerkannt werden. Der Benutzer sollte von und zu Telefonnummern senden und ich validiere sie einfach mit den Daten, die in der DB vorhanden sind, und gebe das Ergebnis zurück.

Mein routes.php liest:

$app->post('/outbound/sms', 'App\Http\Controllers\[email protected]'); 

Mein SmsController unter App vorhanden ist \ Http \ als auch Controller. Es verwendet ein Modell Phone wie folgt:

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use App\PhoneNumber; 
use Illuminate\Support\Facades\App; 

public function sendSms(Request $request) 
{ 

     try 
     { 
      $fromModel = PhoneNumber::findOrFail($request->input('from')); 
     } 
     catch(ModelNotFoundException $e) 
     { 
      return response()->json(['message'=> '', 'error'=> 'from is not found']); 
     } 

     try 
     { 
      $toModel = PhoneNumber::findOrFail($request->input('to')); 
     } 
     catch(ModelNotFoundException $e) 
     { 
      return response()->json(['message'=> '', 'error'=> 'to is not found']); 
     } 

     $this->validateSms($_REQUEST); 

     return response()->json(['message'=> 'inbound sms ok', 'error'=> '']); 
} 

Meine .htaccess Datei lautet:

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    Options +FollowSymLinks 
    RewriteEngine On 

    # Redirect Trailing Slashes If Not A Folder... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 

    # Handle Authorization Header 
    RewriteCond %{HTTP:Authorization} . 
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

</IfModule> 

auf einem Post-API-Aufruf von Postman machen,

http://localhost:9002/outbound/sms?from=1234567890&to=3456789&text=hi 

ich immer bekommen die App-Version als Antwort:

Lumen (5.4.6) (Laravel Components 5.4.*) 

Sogar das Anhängen von index.php an die URL funktioniert nicht. Kann nicht erkennen, was los ist?

Update: Endlich habe ich die Routen funktioniert gut. Der Inhalt meiner routes.php sollte in routes/web.php statt in App \ Http sein.

Mutter jetzt bekomme ich NotFoundHttpException. Unten ist der Stack-Trace ::

in RoutesRequests.php (line 594) 
at Application->handleDispatcherResponse(array(0)) 

in RoutesRequests.php (line 532) 
at Application->Laravel\Lumen\Concerns\{closure}() 

in RoutesRequests.php (line 781) 
at Application->sendThroughPipeline(array(), object(Closure)) 

in RoutesRequests.php (line 534) 
at Application->dispatch(object(Request)) 

in RoutesRequests.php (line 475) 
at Application->run(object(Request)) 

in index.php (line 29) 

Antwort

0

schließlich den Grund für diese NotFoundHttpException bekam:

hinzugefügt, um die folgenden Zeilen in index.php:

$app = require __DIR__.'/../bootstrap/app.php'; 

$request = Illuminate\Http\Request::capture(); 

$app->run($request); 

Lösung gemäß dem untenstehenden Link:

http://laravel-tricks.com/tricks/notfoundhttpexception-lumen.

Für jeden, der auf diese Frage stolpert, bitte achten Sie darauf, Ihre Routen in /routes/web.php zu halten.