我想使用laravel以这种方式在会话中设置一个变量
Session::set('variableName')=$value;
但问题是我不知道在哪里放这个代码,因为我想设置它一次(当访客访问主页或任何其他页面时)? 主要的想法是使用全局变量在所有应用程序控制器中使用它,我听说了与配置变量相关的东西,但我不确定使用配置变量或仅使用会话是否是一个好主意? 感谢
答案 0 :(得分:44)
正确的语法是......
Session::set('variableName', $value);
要获取变量,您可以使用...
Session::get('variableName');
如果你需要设置一次,我会弄清楚你想要什么时候设置它并使用事件来做。例如,如果您想在有人登录时进行设置,您可以使用...
Event::listen('auth.login', function()
{
Session::set('variableName', $value);
});
答案 1 :(得分:18)
我认为你的问题最终可以归结为:
在哪里可以设置可在我的应用程序中全局访问的长期值?
显而易见的答案是,这取决于。它取决于几个因素:
<强>配置强>
如果每个人的价值都相同并且很少会发生变化,那么最好的地方就是在app/config
下面的某个配置文件中,例如app/config/companyname.php
:
<?php
return [
'somevalue' => 10,
];
您可以通过Config::get('companyname.somevalue')
<强>会话强>
如果您打算存储的值与每个用户的不同,则最合理的位置是Session
。这是您在问题中提到的内容,但您使用的语法不正确。在Session中存储变量的正确语法是:
Session::put('somekey', 'somevalue');
以后检索它的正确语法是:
Session::get('somekey');
至于当执行这些操作时,这有点取决于你。如果使用Laravel 5,我可能会在Laravel 4.x或route filter上选择Middleware。下面是使用路由过滤器的示例,该过滤器利用另一个类实际提出值:
// File: ValueMaker.php (saved in some folder that can be autoloaded)
class ValueMaker
{
public function makeValue()
{
return 42;
}
}
// File: app/filters.php is probably the best place
Route::filter('set_value', function() {
$valueMaker = app()->make('ValueMaker');
Session::put('somevalue', $valueMaker->makeValue());
});
// File: app/routes.php
Route::group(['before' => 'set_value'], function() {
// Value has already been 'made' by this point.
return View::make('view')
->with('value', Session::get('somevalue'))
;
});
答案 2 :(得分:5)
在Laravel 5.6中,您需要将其设置为
<form method="post" action="#">
name <input type="text" name="na" />
Male <input type="radio" name="r" value="Male" />
Female <input type="radio" name="r" value="FeMale" />
<input type="submit" name="sbt" onclick="return confirm('are sure');" />
</form>
</body>
</html>
<?php
$a ="";
if(isset($_POST['sbt']))
{
echo $a=
}
?>
要检索它就像
一样简单 session(['variableName'=>$value]);
答案 3 :(得分:4)
在Laravel 5.4中
使用此方法:
Session::put('variableName', $value);
答案 4 :(得分:3)
例如,要在会话中存储数据,通常会使用put
方法或session
帮助程序:
// Via a request instance...
$request->session()->put('key', 'value');
或
// Via the global helper...
session(['key' => 'value']);
要从会话中检索项目,您可以使用get
:
$value = $request->session()->get('key', 'default value');
或全球session
帮助:
$value = session('key', 'default value');
要确定会话中是否存在项目,您可以使用has
方法:
if ($request->session()->has('users')) {
//
}
答案 5 :(得分:1)
你可以尝试
Session::put('variable_Name', "Your Data Save Successfully !");
Session::get('variable_Name');
答案 6 :(得分:1)
要添加到上述答案中,请确保您按以下方式定义函数:
public function functionName(Request $request) {
//
}
注意“(Request $ request)”,现在设置一个会话:
$request->session()->put('key', 'value');
并以这种方式检索会话:
$data = $request->session()->get('key');
要擦除会话,请尝试以下操作:
$request->session()->forget('key');
或
$request->session()->flush();
答案 7 :(得分:1)
php artisan make:controller SessionController --plain
然后
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class SessionController extends Controller {
public function accessSessionData(Request $request) {
if($request->session()->has('my_name'))
echo $request->session()->get('my_name');
else
echo 'No data in the session';
}
public function storeSessionData(Request $request) {
$request->session()->put('my_name','Ajay kumar');
echo "Data has been added to session";
}
public function deleteSessionData(Request $request) {
$request->session()->forget('my_name');
echo "Data has been removed from session.";
}
}
?>
所有路线:
Route::get('session/get','SessionController@accessSessionData');
Route::get('session/set','SessionController@storeSessionData');
Route::get('session/remove','SessionController@deleteSessionData');
答案 8 :(得分:0)
在Laravel 6.x中
// Retrieve a piece of data from the session...
$value = session('key');
// Specifying a default value...
$value = session('key', 'default');
// Store a piece of data in the session...
session(['key' => 'value']);
答案 9 :(得分:0)
要设置会话,您可以尝试以下操作:
$request->session()->put('key','value');
还可以通过以下方法获取会话数据:
$request->session()->get('key');
如果要获取所有会话数据:
$request->session()->all();
答案 10 :(得分:0)
如果您想要持久化会话,
方法一:使用session()->save()
或Session::save()
session(['key' => 'value']);
//or
session()->put('key', 'value');
//then
session()->save();
echo session('key');
方法二:将下面一行从protected $middlewareGroups
的{{1}}移动到app\Http\Kernel.php
数组作为第一行
protected $middleware
确保存储目录有写权限
\Illuminate\Session\Middleware\StartSession::class,
不要使用chmod -R a+rw storage/
来验证会话,使用dd()