kek php AppController ve miras

3 Cevap php

In many tutorial of Acl component in cakephp i got instruction that add component either in AppController or in all the other controllers which inherits AppController.......

ancak sorun

var $components=array('Auth',Acl);

when i use the above line in AppConroller i cant use the Auth or Acl component... but when i use the same code in all the child classes it works fine........

ne sorun olacak

burada benim AppController olduğunu

<?php
class AppController extends Controller {

     var $helpers = array('Html', 'Form', 'Session','CssMenu');
     var $components = array('Auth');

     function beforeFilter() {
        //Configure AuthComponent
        $this->Auth->authorize = 'actions';
        $this->Auth->authError = "Sorry, you are lacking access.";
        $this->Auth->userModel = 'Login';
}

}
?>

UsersController için kod

<?php
class userssController extends AppController{
    var $name="Logins";
    //var $components = array('Auth');
    var $layout='login';

    function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('*');
        $this->Auth->loginRedirect = array('controller' => 'homes', 'action' => 'index');
    }
}
?>

when i comment the line 4 this will b error on uncomment it works fine thanks in advance

herhangi bir yardım takdir edilecektir.

3 Cevap

I /app/cake/libs/controller/app_controller.php, her çocuğun sınıf components.See about app_controller in cookbook kullanmak gerekir Eğer satırı eklemek için code.If yanlış bir şey olabilir diye düşünüyorum:

CakePHP uygulamanızın denetleyicileri AppController aşağıdaki değişkenleri birleştirir: $components,$helpers,$uses

Edit @ deceze

Eğer /app/yourown_app_controller.php kendi özelleştirilmiş baz denetleyicisi yazabilirsiniz

class YourOwnAppController extends Controller
{
       var $components = array("Auth");
}

sonra çocuk X-Core dosyasında require_once(APP."yourown_app_controller.php"); gibi bir requirment bunu kullanabilirsiniz.

Ben bu çekin başardı. Ben bazı yöntemler paylaşılan denetleyicileri bir çift vardı, ama uygulama diğer kontrolörler vermedi (ve olamazdı), belirli bir veri modeli mevcut olmak zorunda çünkü bu yöntemleri kullanın. Ayrıca, paylaşılan yöntemleri içeren denetleyici ekstra bir meydan okumaydı URL çağrılacak izin verilmemelidir.

  1. Shared_controller.php denilen kontrolörleri klasöründe bir kontrolör oluşturun. Bunu bazı paylaşılan yöntemlerini tanımlama ve AppController uzanır emin olun:

    class SharedController extends AppController {
    
  2. Benim alt kontrol AppController uzanan edildi. Yerine SharedController genişletmek için bu değiştirin. Ben özdevinimli paylaşılan denetleyicisi alamadım, bu yüzden yukarıda bir App :: import ekledi:

    App::import('Controller', 'Shared');
    class SubController extends SharedController {
    
  3. Bileşenleri ve yardımcıları elle kendi ana değişkenler birleştirilecek gerekir; Aksi takdirde çocuk sınıflar onları üzerine yazacaktır. Her alt kontrol bir __ construct yöntemi tanımlamak ve bileşenleri, yardımcıları, ve başka ne olursa olsun array_merge diyoruz. Sonunda ana kurucu arayın. Not: Bu beforeFilter yapılabilir olamaz

    function __construct(){
        $this->components = array_merge($this->components,array('Mycomponent'));
        parent::__construct();
    

    }

  4. Eğer http://example.com/shared/method ararsanız, muhtemelen bir veritabanı tablo eksik, ya da bir görünüm eksik bir hata alırsınız. Ben doğrudan çağrılacak Paylaşılan herhangi yöntemleri gerek yoktu, bu yüzden sadece ana sayfasına yönlendirmek için bir yol tanımlanmıştır:

    Router::connect('/shared/*', array('controller' => 'pages', 'action' => 'display', 'home'));
    

O birisi yardımcı olur umarım!

Tanımlamak gerekir, çünkü onların $components ve $helpers üzerine yazmak yerine miras değiştirdikten sonra birleştirme neden herkes merak ise protected $_mergeParent = 'YourParentClass';. Varsayılan olarak bu 'AppController' ayarlanır.

Source: CakePHP 2.4 Source Code