有没有办法在Laravel 5.5的DataBase中保存值?

时间:2018-01-06 05:23:28

标签: php laravel

我正在尝试疯狂的事情。问题是我需要保存董事会编号(实际的董事会是XXXVI,但今年它将改为XXXVII)变量值,因为我认为制作一个表只是为了保存一个值是没用的这将每两年改变一次。所以我发现在控制器上使用全局变量来保存该值,并且我的代码一切顺利,除了它没有将值保存到变量中。这是我的代码:

控制器代码:

//Here I declare the variable
protected $board;

// Here I initialize the variable so I can send it to the template
public function editDirectors() 
{
    $numberBoard = $this->board;
    return view('board.edit_directors', compact('numberBoard'));
}

//Here it's supposed to save the value into the variable
public function uploadNumber(Request $request)
{
    $this->board = $request->value;
    $numberBoard = $this->board;
    return $numberBoard;
}

模板代码:

<a href="#" id="board-number" data-type="text" 
                              data-pk="1" 
                              data-url="{{url('/board-of-directors/edit/number-board')}}"
                             data-value="{{$numberBoard}}" 
                             data-name="numberBoard" 
                             data-title="Number Board">{{$nummberBoard}}</a>
Board of Directors</h3>

X-Editable Initilization

$('#board-number').editable();

路线

Route::put('/board-of-directors/edit/number-board' , 'DirectorController@uploadNumber');

有趣的是,当我显示Web控制台以检查网络选项卡并检查XHR部分时,它会发送200响应,并在预览中返回我输入的值,但它不会将值保存到变量

非常感谢帮助:3

修改

我创建了一个config / board.php文件并添加了以下行:

return [
'director' => [
    'number' => 'XXXVI'
]
];

使用以下方法修改控制器:

// Here I get the value at config/board.php and send it to the template and works :D
public function editDirectors() 
{
    $numberBoard = Config::get('board.director.number');
    return view('board.edit_directors', compact('numberBoard'));
}

//Here it's supposed to save the new value into the config/board.php file but doesn't works :(
public function uploadNumber(Request $request)
{
    $numberBoard = $request->value;
    Config::set('board.director.number', $numberBoard);
    return $numberBoard;
}

我运行了这个命令,所以config / board.php可以将值发送给控制器。

php artisan config:cache

另外,每当我更改config / board.php的值时,似乎我必须运行此命令才能显示该值。

您可以建议的任何想法?非常感谢:3

2 个答案:

答案 0 :(得分:1)

您可以将其保存在config或.env文件中。

.env

中定义
DirectorNumber=XXVII

在应用程序控制器中访问

protected $board;
function __construct($board)
{
    $this->$board = env('DirectorNumber');
}

否则您可以将其保存在配置文件中

  1. 在config文件夹中创建board.php
  2. config/board.php中写<?php return ['count' => 'XXVII'];
  3. config('board.count')
  4. 访问变量

答案 1 :(得分:0)

<强>解决方案

我认为我所做的是一种不好的做法,但它解决了我的问题。

取自:How to set .env values in laravel programmatically on the fly

首先我在.env文件中添加了这个:

BOARD_NUMBER = XXXVI

然后我在Controller中更新了我的代码:

//Here I get the value form the BOARD_NUMBER at .env and send it to the template
public function editDirectors() 
{
    $numberBoard = env('BOARD_NUMBER');
    return view('board.edit_directors', compact('directors', 'numberBoard'));
}

//Here I open the .env and rewrite the BOARD_NUMBER value
protected function uploadNumber(Request $request)
{
    $numberBoard = $request->value;
    $envFile = app()->environmentFilePath();
    $str = file_get_contents($envFile);

    $oldValue = env('BOARD_NUMBER');

    $str = str_replace("BOARD_NUMBER={$oldValue}", "BOARD_NUMBER={$numberBoard}\n", $str);

    $fp = fopen($envFile, 'w');
    fwrite($fp, $str);
    fclose($fp);
}

在我采用解决方案的同一个链接中,有另一个解决方案,其中命令&#34; php artisan config:cache&#34;运行,但我怀疑它对我有用,因为我将网络应用程序上传到共享主机。

希望这有助于其他人:)