几乎所有控制器的默认代码

时间:2015-12-03 20:22:38

标签: php laravel

我的__construct()中有很少的行和变量应该启动并传递给我的控制器中的方法。

现在我已经在__construct()

中找到了它们
 class myController extends Controller {  

      public function __construct()
      {
            $this->pageTitle= DB::(...)
            $this->user = Auth::(...)
            (+100 rows)
      } 

      public function index()
      {
            echo $this->pageTitle;
      }

 }

由于incluce()不能与类和__construct()一起使用,并且上面的确切行在60%的控制器中使用,如何从一个源更容易地实现代码?

编辑:
它是一个多站点,带有通配符子域。

100行由ie:

组成
  • 根据域重新路由到正确的mysql-row。
  • 很多mysql-fetches:菜单,模板,页面标题......
  • 补充工具栏小部件。

对于60%以上的页面和控制器(包括mysql提取的页面和现场应用程序),Thiese都是相同的

2 个答案:

答案 0 :(得分:1)

您可以创建一个BaseController,它由需要这些共享变量的所有控制器进行扩展。

<强> BaseController.php

<?php 

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class BaseController extends Controller
{
    public function __construct(){
        $this->foo = 'foo';
        $this->bar = 'bar';
    } 
}

<强> TestController.php

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\BaseController;

class TestController extends BaseController
{
    public function index()
    {
        dump($this->foo);
        dump($this->bar);
    }
}

<强> routes.php文件

Route::get('test', 'TestController@index');

<强>结果:

"foo"
"bar"

但我仍然对你要添加的100多行或变量感到好奇,这听起来像是可以优化的东西。你能提供更多关于此的信息吗?

答案 1 :(得分:0)

这对你有帮助吗?

<?php
class myClass {
    public function __construct() {
        echo "myClass init'ed successfuly!!!";
    }
}
?>

./index.php
<?php
// we've writen this code where we need
function __autoload($classname) {
    $filename = "./". $classname .".php";
    include_once($filename);
}

// we've called a class ***
$obj = new myClass();
?>
  

http://us3.php.net/manual/en/function.autoload.php