Использование пространств имен в Laravel 4
Я новичок в Laravel и использую пространства имен PHP в целом. У меня не возникало никаких проблем, пока я не решил создать модель под названием "Файл". Как я могу правильно использовать пространство имен, чтобы использовать класс модели File?
Файлы app/controllers/FilesController.php
и app/models/File.php
. Я пытаюсь создать новый File
в FilesController.php
.
Ответы
Ответ 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
Ответ 2
сначала загрузите свой класс с помощью
$ composer dump-autoload
затем
$file = new File;
// your stuff like:
$file->name = 'thename';
$file->active = true;
$file->save();
Раздел: Вставка, обновление, удаление на Laravel 4 Красноречивый документ
Ответ 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