【问题标题】:Is there a way to save values besides in the DataBase with Laravel 5.5?除了使用 Laravel 5.5 在数据库中保存值之外,还有其他方法吗?
【发布时间】:2018-06-15 21:52:21
【问题描述】:

我正在尝试一些疯狂的事情。问题是我需要在变量上保存董事会编号(实际董事会是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

【问题讨论】:

  • 所以据我了解是你想要持久存储但不想去数据库,所以你可以将它保存在文件中或使用 Redis
  • @DhavalChheda 那么,我无法将值保存在“永久”变量中吗?
  • 没有变量不是持久存储
  • @DhavalChheda 这说明了一切。谢谢,我知道这将是一个超级菜鸟问题。我会检查 Redis,听起来不错。
  • 我建议将其存储到custom config file。您可以根据需要手动更改它,即使您也可以动态更改配置文件,但这不是一个好主意。

标签: php laravel


【解决方案1】:

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

.env 中定义

DirectorNumber=XXVII

在应用控制器中访问

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

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

  1. 在配置文件夹中创建board.php
  2. config/board.php&lt;?php return ['count' =&gt; 'XXVII'];
  3. 通过config('board.count')访问变量

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

【讨论】:

  • 我会检查两种方式,因为这个想法是用户可以更改数字,所以我必须动态地进行。谢谢:)
  • 好吧,我尝试了 env 方法,但没有奏效,但自定义配置文件有效,除了它没有保存值。此外,我必须运行“php artisan config:cache”命令以使其显示 config/board.php 文件的值。我会更新问题:)
【解决方案2】:

解决方案

我认为我的做法很糟糕,但它解决了我的问题。

取自: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);
}

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

希望这对其他人有所帮助:)

【讨论】:

    猜你喜欢
    • 2015-12-08
    • 1970-01-01
    • 2021-09-19
    • 2018-03-01
    • 1970-01-01
    • 2014-12-02
    • 2017-03-03
    • 2023-02-09
    • 2019-09-14
    相关资源
    最近更新 更多