CodeIgniter 3在应用程序包之间共享核心模型

时间:2017-12-30 15:50:35

标签: php codeigniter codeigniter-3

我一直在谷歌搜索一段时间,但我似乎无法找到解决我的问题的方法。我有一个带有2个应用程序的Codeigniter实例(后端和前端)。

所以我设置了我的应用程序文件夹:

  • 根目录/应用
    • 前端
    • 后端

现在我在2个应用程序之间有相似之处,比如模型等。所以我创建了一个“通用”包,就像这样(我发现这种方式在互联网上的某个地方做,不记得到底在哪里):

  • 根目录/应用
    • 前端(标准codeigniter结构)
    • 后端(标准codeigniter结构)
    • 普通
      • 配置/
      • 助手/
      • 语言/
      • 库/
      • 模型/

它可以正确自动加载,我可以在后面和前端之间共享模型等。但现在我想介绍一个MY_Model,你必须将它放在应用程序文件夹中的core目录中(如文档所述)。当然,我想在3个应用程序包上共享模型。 (我希望前端和后端的模型可以扩展它,但也需要普通包中的模型)。

这是我被卡住的地方。我尝试在core应用程序包中放置一个common文件夹,但是我甚至无法使用common包中的模型扩展它。

Class 'MY_Model' not found in /webroot/application/common/models/News_model.php on line 11

我似乎无法将其扩展到任何其他包中。

Class 'MY_Model' not found in /webroot/application/backend/models/Ad_model.php

我不想复制MY_model类3次,每次添加一些新功能时编辑3个不同的文件。

有什么方法可以解决这个问题吗?我似乎无法弄明白。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将核心目录移到外面并将其符号链接回每个结构。

class Level1: SKScene,SKPhysicsContactDelegate {
    var ball:SKSpriteNode!
    var paddle:SKSpriteNode!
    var scoreLabel:SKLabelNode!
    var score:Int = 0 {
        didSet{
            scoreLabel.text = "Score:\(score)"
        }
    }

    override func didMove(to view: SKView) {
        ball = self.childNode(withName: "Ball") as! SKSpriteNode
        paddle = self.childNode(withName: "Paddle") as! SKSpriteNode
        scoreLabel = self.childNode(withName: "Score") as! SKLabelNode

        ball.physicsBody?.applyImpulse(CGVector(dx: 50, dy: 50))
        ball.physicsBody?.mass=0.1
        let border = SKPhysicsBody(edgeLoopFrom: (view.scene?.frame)!)
        border.friction = 0

        self.physicsBody = border
        ball.physicsBody?.mass = 0.09
        self.physicsWorld.contactDelegate = self
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches {
            let touchLocation = touch.location(in: self)
            paddle.position.x = touchLocation.x
        }
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches {
            let touchLocation = touch.location(in: self)
            paddle.position.x = touchLocation.x
        }
    }


    func didBegin(_ contact: SKPhysicsContact) {
        let bodyAName = contact.bodyA.node?.name
        let bodyBName = contact.bodyB.node?.name

        if bodyAName == "Ball" && bodyBName == "Brick" || bodyAName == "Brick" && bodyBName == "Ball"{
            if bodyAName == "Brick" {
                contact.bodyA.node?.removeFromParent()
                score += 1
            } else if bodyBName == "Brick" {
                contact.bodyB.node?.removeFromParent()
                score += 1
            }
        }
    }

    override func update(_ currentTime: TimeInterval) {
        if (score == 9) {
            scoreLabel.text = "You Won!"
            self.view?.isPaused = true
            sleep(2)
            let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let vc = mainStoryboard.instantiateViewController(withIdentifier: "GameViewController")
            self.view?.window?.rootViewController?.present(vc, animated: true, completion: nil)
            level1done = true
        }
        if (ball.position.y < paddle.position.y) {
            scoreLabel.text = "You Lost!"
            self.view?.isPaused = true
            sleep(2)
            let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let vc = mainStoryboard.instantiateViewController(withIdentifier: "GameViewController")
            self.view?.window?.rootViewController?.present(vc, animated: true, completion: nil)
        }
    }
}