2016-12-27 59 views
0

我正在一個項目上工作,但我有一個非常惱人的問題。我使用一個PHP文件rb.php,其中包含項目的幾個重要類(RedBean ORM的文件rb.php,都在一箇中)。 問題是我可以在特定位置使用該文件正確使用該文件,但不能在其他位置使用該文件。PHP無法重新聲明類 - 需要錯誤 - Silex框架

這是我的樹形圖:

Arborescence

當我去到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(); 

我有$生命週期的良好的價值。不過,我想爲函數添加(使用此文件中的一個控制器),更新()等。所以我試試這個:

<?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,但如果我沒有說,它缺乏一個類。 任何幫助將不勝感激。

回答

2

由於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瞭解namespace

+1

非常感謝!我愚蠢的忘記了'使用'哈哈:)謝謝 –

+0

最受歡迎:-) –

相關問題