web-dev-qa-db-fra.com

Utiliser les espaces de noms dans Laravel 4

Je suis nouveau dans Laravel et j'utilise les espaces de noms PHP en général. Je n'ai rencontré aucun problème jusqu'à ce que je décide de créer un modèle nommé File. Comment pourrais-je utiliser correctement l'espacement des noms pour pouvoir utiliser ma classe de modèle de fichier?

Les fichiers sont app/controllers/FilesController.php et app/models/File.php. J'essaie de créer une nouvelle File dans FilesController.php.

43
user2030045

Le namespacing est assez facile une fois que vous avez compris.

Prenons l'exemple suivant:

app/models/File.php

namespace App\Models;

class File {

    public function someMethodThatGetsFiles()
    {

    }
}

app/controllers/FileController.php

namespace App\Controllers;

use App\Models\File;

class FileController {

    public function someMethod()
    {

        $file = new File();
    }
}

Déclarer l'espace de noms:

namespace App\Controllers;

Rappelez-vous qu'une fois que vous avez placé une classe dans un espace de noms pour accéder aux classes intégrées de PHP, vous devez les appeler à partir de l'espace de noms racine. Par exemple: $stdClass = new stdClass(); deviendra $stdClass = new \stdClass(); (voir le \)

"Importer" d'autres espaces de noms:

use App\Models\File;

Cela vous permet ensuite d'utiliser la classe File sans le préfixe d'espace de noms.

Sinon, vous pouvez simplement appeler:

$file = new App\Models\File();

Cependant, il est recommandé de le placer en haut de la page dans une instruction use, car vous pourrez alors voir toutes les dépendances du fichier sans avoir à analyser le code.

Une fois que cela est fait, vous devez exécuter composer dump-autoload pour mettre à jour la fonction de chargement automatique de Composer afin de prendre en compte vos classes nouvellement ajoutées.

N'oubliez pas que si vous souhaitez accéder au FileController via une URL, vous devez définir un itinéraire et spécifier l'espace de nom complet de la manière suivante:

Route::get('file', 'App\\Controllers\\FileController@someMethod');

Ce qui dirigera toutes les requêtes GET/file vers la someMethod() du contrôleur

Consultez la documentation de PHP sur Namespaces et Nettut est toujours une bonne ressource avec this article

88
Josh Holloway

d'abord, chargez votre classe avec:

$ composer dump-autoload

puis

$file = new File;

// your stuff like:
$file->name = 'thename';
$file->active = true;

$file->save();

Rubrique: Insérer, mettre à jour, supprimer du document de Laravel 4 Eloquent

5
Pierre Broucz

Pour nommer votre modèle, en haut de votre classe de modèle juste après l’ouverture

Ensuite, lorsque vous appelez des contrôleurs, vous appelez new Whatever\Model;

La première fois, vous devrez probablement effectuer un autodéchargement avec composeur. 

1
ipixelsmediaworks

jetez un oeil à elle .. espérons pouvoir effacer votre requête ....

<?php

 namespace app\controllers;
 use yii\web\Controller;
 use app\models\users;
  class UserController extends Controller{
 public function actionIndex()
 {
echo "working on .....";
}
}
0
Muhammad Saeed