0

私はプロジェクトに取り組んでいますが、非常に厄介な問題があります。プロジェクトのいくつかの重要なクラスを含む PHP ファイル rb.php を使用します (RedBean ORM のファイル rb.php がすべて 1 つにまとめられています)。問題は、特別な場所ではファイルを正しく使用できますが、別の場所では正しく使用できないことです。

これは私の樹木です:

樹枝状

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 ファイルにあるため、これは正常です。

require をすれば class redeclare がありますが、入れないと class がありません。どんな助けでも大歓迎です。

4

1 に答える 1

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ください。

于 2016-12-27T23:42:50.340 に答える