Подтвердить что ты не робот

Использование пространств имен в Laravel 4

Я новичок в Laravel и использую пространства имен PHP в целом. У меня не возникало никаких проблем, пока я не решил создать модель под названием "Файл". Как я могу правильно использовать пространство имен, чтобы использовать класс модели File?

Файлы app/controllers/FilesController.php и app/models/File.php. Я пытаюсь создать новый File в FilesController.php.

4b9b3361

Ответ 1

Помещение имен довольно просто, как только вы получите это.

Возьмем следующий пример:

приложение/модели/file.php   

namespace App\Models;

class File {

    public function someMethodThatGetsFiles()
    {

    }
}

приложение/контроллеры/FileController.php   

namespace App\Controllers;

use App\Models\File;

class FileController {

    public function someMethod()
    {

        $file = new File();
    }
}

Объявить пространство имен:

namespace App\Controllers;

Помните, как только вы разместили класс в пространстве имен для доступа к любому из встроенных классов PHP, вам нужно вызвать их из корневого пространства имен. например: $stdClass = new stdClass(); станет $stdClass = new \stdClass(); (см. \)

"Импортировать" другие пространства имен:

use App\Models\File;

Это позволяет вам использовать класс File без префикса пространства имен.

В качестве альтернативы вы можете просто позвонить:

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

Но лучше всего поместить его в начало в инструкции use, так как тогда вы можете увидеть все зависимостей между файлами, не просматривая код.

После этого вам нужно запустить composer dump-autoload, чтобы обновить функцию автозагрузки Composer, чтобы учесть ваши недавно добавленные классы.

Помните, что если вы хотите получить доступ к FileController через URL-адрес, вам необходимо определить маршрут и указать полное пространство имен следующим образом:

Route::get('file', 'App\\Controllers\\[email protected]');

Который направит все запросы GET/file на контроллер someMethod()

Взгляните на документацию PHP на Namespaces, а Nettut всегда является хорошим ресурсом с this article

Ответ 3

Чтобы проставить пространство вашей модели в верхней части вашего модельного класса сразу после открытия

Затем, когда вы вызываете из контроллеров, вы вызываете new What whatever\Model;

Вам, вероятно, придется сначала делать свалку-автозагрузку с композитором.

Ответ 4

посмотрите на него.. надеюсь, очистит ваш запрос....

<?php

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

Ответ 5

Пространства имен определяются в верхней части PHP-классов сразу после открывающего тега php-скрипта следующим образом:

 <?php
   namespace MyNameSpace;

Когда вы хотите использовать класс пространства имен в каком-либо другом классе, вы определяете его следующим образом:

new MyNameSpace\PhpClass;

или импортируйте его вверху файла (после пространств имен, если они есть) следующим образом:

 <?php

   //namespace

   use MyNameSpace\MyPHPClass;

   //then later on the code you can instantiate the class normally
   $myphpclass = new MyPHPClass();

В пространствах имен Laravel можно определять везде, где композитор может их автоматически загружать, я бы рекомендовал определить пространства имен в каталоге приложения. Таким образом, вы можете определить пространство имен, например Utils, для хранения классов Utility, создав каталог Utils в каталоге приложения, создав наши классы утилит и определив пространство имен, как мы делали выше.

После этого вы запустили команду, чтобы попросить композитора автоматически загрузить классы:

 $ composer dump-autoload