J'ai le code suivant:
<?php
if (!$this->Auth->user())
{
echo $this->element('header');
}
else
{
echo $this->element('header-bar');
}
?>
dans ma vue, ce qui devrait afficher un en-tête différent pour les utilisateurs connectés, mais renvoie l'erreur suivante:
Notice (8): Undefined property: View::$Auth [APP/views/layouts/page.ctp, line 17]
Fatal error: Call to a member function user() on a non-object in /Users/cameron/Sites/thehive/app/views/layouts/page.ctp on line 17
Comment puis-je réparer ça? Merci
Remarque: Vérifiez également les informations de meotimdihia réponse ci-dessous . Il y a beaucoup de votes positifs.
Le composant Auth doit être utilisé dans le contrôleur. Vous voudrez vérifier les autorisations dans le contrôleur, puis définir une variable pour la vue, par exemple, $this->set('authUser', $this->Auth->user());
. Ensuite, à votre avis, vous pouvez faire:
if (!$authUser)
{
echo $this->element('header');
}
Si vous souhaitez que cela soit fait automatiquement pour toutes les méthodes du contrôleur, vous pouvez envisager de modifier cake/libs/controller/app_controller.php
afin qu'il inclue le composant Auth.
Vous n'avez pas besoin de faire $this->set(compact('authUser'));
Utilisez-le uniquement dans View:
if ($this->Session->read('Auth.User')){
// do something
}
À partir de CakePHP 2.x:
<?php if (AuthComponent::user('id')): ?>
Logged in as <?= AuthComponent::user('name') ?>
<?php endif; ?>
Pour résumer les réponses sur cette page, évaluez l'un des éléments suivants en fonction de la version de CakePHP que vous utilisez:
Pour la version 1.x
$this->Session->read('Auth.User')
Pour la version 2.x
AuthComponent::user('id')
Fore version 3.x
$this->request->session()->read('Auth.User.id')
Cela fonctionne dans Cakephp 3+ (les modifications modifient: "Auth.User.username" en fonction de vos données de session)
<?php
if (is_null($this->request->session()->read('Auth.User.username'))) {
echo "....logged out";
} else {
echo "You are Logged in As " . $this->request->session()->read('Auth.User.username');
}
?>
cakePHP ne fonctionne pas depuis longtemps avec CakePHP mais, autant que je puisse m'en souvenir, ne prend pas en charge Auth in View. Ce que vous pouvez faire est bien sûr de définir une variable dans le contrôleur .__ pour l’utiliser dans la vue.
<?
class AppController {
....
function beforeFilter(){
....
$this->set('auth',$this->Auth);
}
....
}
?>
puis utilisez-le dans la vue comme celle-ci
$auth->....
ou vous pouvez utiliser le AuthHelper écrit par Ritesh Agrawal
http://bakery.cakephp.org/articles/ragrawal/2008/07/29/authhelper
BTW
Je pense que s’il s’agit de tester uniquement si une personne est connectée à la réponse de @ webbiedaveest préférable en termes de style MVC.
Néanmoins, si vous devez accéder à userdata dans la vue, extrayez simplement le composant userinfo À partir de Auth et définissez-le dans le contrôleur comme je vous l'ai montré et utilisez-le dans la vue
Cordialement
Essaye ça
class AppController extends Controller{
$this->user = false;
public function beforeFilter(){
$this->user = $this->Auth->user();
}
public function beforeRender(){
$this->set('logged_user',$this->user);
}
}
Maintenant, vous pouvez vérifier $ utilisateur_logué dans la vue comme
if($logged_user){
// users logged in $logged_user have all the details
}else{
// not logged in
}
dans Cakephp 3, vous pouvez vérifier la session d'authentification dans la vue comme celle-ci
if($this->request->Session()->read('Auth.User')){
//do when login
}
else{
//do not login
}
Vous devez définir les détails de l'utilisateur à partir d'un contrôleur, de préférence AppController, hérité de tous les contrôleurs de votre site. Créez/modifiez votre app_controller.php pour qu'il contienne cette méthode beforeFilter();
.
<?php
class AppController extends Controller {
function beforeFilter() {
$user = $this->Auth->user();
$this->set(compact('user'));
}
Cela définira une variable appelée $user
sur les vues qui seront vides si l'utilisateur n'est pas connecté ou contiennent leurs données si elles le sont.
J'ai trouvé quelque chose d'intéressant à mentionner, le gestionnaire de session de CakePHP 3.x est obsolète,
si nous voulons accéder à la session en vue, nous pouvons le faire via le gestionnaire de demandes. nous devons utiliser
<?php
// For CakePHP 3.x to access all user information
$this->request->session()->read('Auth.User');
// For CakePHP 3.x to check session
if($this->request->session()->read('Auth.User.id')) {
}
?>
//In the views (or layout)
$session->check('Auth.User.id');
//In controller
$this->Auth->User('id');
Si cela aide quelqu'un dans la session 3.7.8 de Cakephp, il a été privé de getSession afin de mettre à jour le commentaire de Lee Nielsen.
if (is_null($this->request->getSession()->read('Auth.User.username'))) {
echo "....logged out";
} else {
echo "You are Logged in As " . $this->request->getSession()->read('Auth.User.username');
}