User-Klasse, die nicht in Laravel 5
Ich habe Folgendes Problem.
Ich habe nur ein Upgrade auf Laravel 5 von 4.2 aber meine UserController, die ich zunächst nur kopiert, um die neue Controller-Ordner funktioniert nicht.
Er sagt mir immer, dass es nicht Unterweltler der Benutzer-Modell.
Mein Code sah wie folgt, wenn ich es kopiert:
UserController.php
<?php
use App\Transformer\UserTransformer;
class UserController extends ApiController
{
public function index()
{
App::abort(403, 'This is not allowed');
}
public function show($id)
{
$user = User::find($id);
if($user->access_token!=Input::get('access_token')){
return "It is not allowed to access data from other users";
}else{
$result = $this->respondWithItem($user, new UserTransformer);
return $result;
}
}
public function getID()
{
$user = User::where('email', '=', Input::get('email'))->first();
if($user->access_token!=Input::get('access_token')){
return "It is not allowed to access data from other users";
}else{
$result = $user->id;
return $result;
}
}
public function register()
{
$user = new User;
$name = Input::get('name');
$email = Input::get('email');
$password = Input::get('password');
if($name != null AND $email != null AND $password != null){
if(User::where('email', '=', Input::get('email'))->exists()){
return "A user with this email already exists";
}else{
$user->name = $name;
$user->email = $email;
$user->password = $password;
$user->save();
return "Success";
}
}else{
return "All fields are required";
}
}
public function login(){
$user = User::where('email', '=', Input::get('email'))->first();
if($user != null){
if($user->password==Input::get('password')){
$then =$user->time;
$now = strtotime("now");
$thenTimestamp = strtotime($then);
$difference = $now - $thenTimestamp;
if((empty($user->date) AND empty($user->time))OR($difference >=10800)OR($user->date!=date('d.m.Y'))){
$user->access_token=self::getGUID();
$timestamp = time();
$user->date=date("d.m.Y",$timestamp);
$timestamp = strtotime("now");
$user->time=date('H:i', $timestamp);
$user->save();
}
return $user->access_token;
}
else
return "Wrong username or password";
}else
return "Wrong username or password";
}
function getGUID(){
if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*100000);
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45);
$uuid =
substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12);
return $uuid;
}
}
public function check(){
$user = User::where('access_token', '=', Input::get('access_token'))->first();
if($user != null){
}else
return "no session";
}
}
Hatte ich nicht den der Controller haben und der Benutzer das Modell funktionierte einfach out of the box. Die UserTransformer nicht das Benutzer-Modell enthalten. Hier das original:
<?php
use App\User;
use League\Fractal\TransformerAbstract;
class UserTransformer extends TransformerAbstract
{
/**
* Turn this item object into a generic array
*
* @return array
*/
public function transform(User $user)
{
return [
'id' => (int) $user->id,
'name' => $user->name,
'email' => $user->email,
'phone' => $user->img,
'mobile' => $user->mobile,
'address' => $user->address,
];
}
}
Dass ist alles, was ich brauchte, um die Funktionen zu arbeiten.
Aber jetzt in Laravel 5 der UserController mir zu sagen hat, dass der Benutzer die Klasse nicht gefunden. Ich habe versucht, fügen Sie Zeilen wie diese "App/User" oder "use App/Http/Controller/Benutzer" zum UserController. Es hat nicht funktioniert.
Ich bin nicht sicher, warum, da hab ich mein Transformer enthalten, ich bekomme keine Fehlermeldung, aber der Benutzer nicht arbeiten.
Ich habe auch versucht, verschiedene Methoden zum zählen der User-Modell in den Trafo, da ich dachte es könnte ein Fehler sein aber ich komme nicht auf eine funktionierende version.
Ich hoffe mir kann jemand helfen.
- Hast du dich registriert und den alias für den Benutzer?
- Plus, haben Sie befolgen Sie die upgrade-Schritte von Laravel docs? laravel.com/docs/5.0/upgrade
- Wo ist dein
User
Klasse-definition-Datei befindet?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lassen Sie uns klären, nur einige Dinge, die konnten sein sich in das laden der controller.
Die route: standardmäßig, laravel kommt mit einem provider namens
RouteServiceProvider
gefunden beiapp\providers
. Wenn Sie einen Blick auf diese Datei finden Sie, dass es eine variable namens$namespace
. Dies ist sehr nützlich, wenn Sie wünschen, erhalten Sie mehr "klar" Routenroutes.php
- Datei. Zum Beispiel, dass$namespace = 'App\Http\Controllers'
Sie konvertieren diese...zu diesem...
Also ja, eine kurze Wahl für schreiben Sie Ihre Regeln. Standardmäßig wird der Wert von
$namespace
eingestellt ist{Application Name}\Http\Controllers
Der controller: Wenn Sie laravel installation arbeitet mit der
RouteServiceProvider
dann ist dein controller wird nie gefunden werden, weil die Routen Präfix der namespace zuvor erklärt. So, der Namensraum (namespace) sollte ich verwenden, in Controllern? es gibt zwei Optionen:Folgenden werden die Konventionen von laravel 5 setzen Sie Ihren controller an
app/Http/Controllers/
Ordner. Dann deklarieren Sie den namespace als default:Einstellungen bei
routes.php
wie:Beachten Sie, dass der namespace-Struktur den gleichen Ordner structe, wo es sich befindet (Http/Controllers/)
Löschen
RouteServiceProvider
vom Anbieter-Ordner UND löschen Sie es von Anbietern array inconfig/app.php
- Datei. Dann können Sie "absolute" namespaces wie:Name der Anwendung und autoload
haben Sie Frage sich, warum
app
Ordner nicht Hinzugefügt namespace? Werfen Sie einen Blick des Komponisten.json-Datei:Wenn Sie das beachten, werden Sie sehen, dass es ist ein alias, die Punkte heraus zu
app/
Ordner. So, für die app wird in Reaktion auf das alias anstelle vonapp\Http\Controllers
.Ich bin kein Experte in diesem Thema, hoffe, jemand geben Sie mir die hand erweitern Sie diese Erklärung, aber ich habe gelesen, dass
psr-4
ist wie eine Regel zu machen, dass Sie mit den namespace mit der Ordner-Struktur. Als Ergebnis, wenn Ihr controller ist wie...Den autoload-Klasse erwartet, dass der controller befindet sich in einem
app/Http/Classes/
stattMyCoolApp/Http/Controllers
Dass ist ein Grund, warum der controller nicht gefunden werden konnte.