PHP не может переопределить класс — Требуется ошибка — Silex Framework

Я работаю над проектом, но у меня очень неприятная проблема. Я использую PHP-файл rb.php, который содержит несколько важных классов для проекта (файл rb.php в RedBean ORM, все в одном).
Проблема в том, что я могу правильно использовать файл с требованием в специальном месте, но не в другом месте.

Это мое древовидность

древовидное образование

Когда я иду на index.php, все идет хорошо, я могу сделать require('rb.php');

<?php

require_once 'vendor/autoload.php';
require('rb.php');
R::setup('mysql:host=localhost;
dbname=silex','root','');
require('Model_Bandmember.php');

use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;$srcDir = __DIR__;
$app = new Application();
$app['debug'] = true;
$app->register(new DDesrosiers\SilexAnnotations\AnnotationServiceProvider(), array(
"annot.controllerDir" => $srcDir."\controllers"));

$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => $srcDir.'\views',
));

$bandmember = R::dispense('bandmember');
$bandmember->name = 'Fatz Waller';
$id = R::store($bandmember);
$bandmember = R::load('bandmember',$id);
R::trash($bandmember);
echo $lifeCycle;die();
$app->run();

У меня есть хорошее значение $ lifeCycle. Но я хотел бы использовать этот файл в контроллере для функций add (), updates () и т. Д. Поэтому я пытаюсь это:

<?php

namespace App\Controllers;
use DDesrosiers\SilexAnnotations\Annotations as SLX;
use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
require(__DIR__.'/../rb.php');
/**
* @SLX\Controller(prefix="article")
*/
class ArticleController
{

/**
* @SLX\Route(
*      @SLX\Request(method="GET", uri="/"),
*      @SLX\Bind(routeName="articleIndex")
* )
*/
public function index(Application $app)
{
$articles = R::findAll('article');
return $app['twig']->render('Article/index.twig', array(
'articles' => $articles,
));
}
...
...

Но у меня есть эта ошибка:

Cannot redeclare class RedBeanPHP\RedException in C:\wamp64\www\SilexTest\rb.php on line 6737

Очень хорошо, я думаю, что файл уже должен присутствовать! Но если я прокомментирую это у меня есть эта ошибка:

Class 'App\Controllers\R' not found

Это нормально, потому что этот класс находится в файле rb.php, который я только что прокомментировал.

Если я выполняю требование, у меня есть redeclare класса, но если я не ставлю его, ему не хватает класса.
Любая помощь будет оценена.

0

Решение

Так как rb уже включен, поэтому нет необходимости включать его в любом месте. Чтобы использовать его из глобальной области, вы должны использовать \R:

$articles = \R::findAll('article');

Потому что, похоже, что R доступен в глобальном масштабе. В этом случае вы можете использовать use R; в верхней части вашего класса, например:

namespace App\Controllers;

use DDesrosiers\SilexAnnotations\Annotations as SLX;
use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use R; // <-- Notice this

/**
* @SLX\Controller(prefix="article")
*/
class ArticleController
{
// Use: R::findAll('article') in any method in this class
}

Вы должны прочитать о Пространство имен в PHP,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]