Я работаю над проектом, но у меня очень неприятная проблема. Я использую 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 класса, но если я не ставлю его, ему не хватает класса.
Любая помощь будет оценена.
Так как 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
,
Других решений пока нет …