繁体   English   中英

除了使用 Laravel 5.5 在数据库中保存值之外,还有其他方法可以保存值吗?

[英]Is there a way to save values besides in the DataBase with Laravel 5.5?

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

控制器代码:

//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-可编辑初始化

$('#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

您可以将其保存在 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')访问变量

编辑:如果config:cache laravel 不选择更新的 env 变量,那么重新运行config:cacheconfig:clear (它将开始恢复应用程序中的 env 值)

解决方案

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

摘自: How to set .env values in laravel in the fly

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

BOARD_NUMBER = XXXVI

然后我在控制器中更新了我的代码:

//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);
}

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

希望这有助于其他:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM