This forum has moved to a new location and is in read-only mode. Please visit talk.octobercms.com to access the new location.
Hi everyone, i want to do a simple things: Using the controller (method create) to make a popup a retrieve the form of an other controller. and put it in a popup to make an ajax request.
Exemple, in my plugins i've a Customers controller, and a Invoices controller, i list my items, create and update them. But, i want to create a customer from the Invoice view if the user doesn't exist, i want to call the form of Customer create form in a popup so, in my Invoices controller i've put this code:
public function OnLoadContent()
    {
        $config = $this->makeConfig('$/prestasafe/erp/models/customer/fields.yaml');
        $config->model = new Customer;
        $config->recordUrl = 'prestasafe/erp/customers/create/';
        $widget = $this->makeWidget('Backend\Widgets\Form', $config);
        $widget->bindToController();
        $this->vars['widget'] = $widget;
        return $this->makePartial('$/prestasafe/erp/models/customer/_add_customer_form.htm');
    } 
I call the popup with this button:
<a data-control="popup" data-handler="onLoadContent" href="nojavascript...;" class="btn btn-primary btn-lg"> Launch Ajax Form </a>
It works fine. There is my popup view:
<?= Form::open(); ?>
    <?= $widget->render() ?>
    <!-- <button type="submit" class="btn btn-primary">
        Add user
    </button> -->
    <button data-request="onAddUser" class="btn btn-primary">
        Add user
    </button>
<?= Form::close() ?>
But now, i want to call the create action of the CustomersController, so i've tried this:
public function onAddUser()
{
         $ct = new CtrlCustomer;
         $ct->asExtension('FormController')->create_onSave('create');
}
It seems to work, but it create an empty Customer. So i try this:
public function onAddUser()
    {
        $data = collect(post());
        $data->forget('_session_key');
        $data->forget('_token');
        \trace_log($data->toArray());
        $c = Customer::create($data->toArray());
        \trace_log($c);
        \Flash::success('Success!!!');
    } 
Same probleme. Someone have an idea ?
Thanks
You need to put which array name in the model. Something in this style ...
$config->arrayName = 'Customer';
Yeap, i've found it,
 public function onAddUser()
    {
        $data = $this->widgetCustomer->getSaveData();
        $model = new \Prestasafe\Erp\Models\Customer;
        $model->fill($data);
        $model->save();   
        return [
            '#currency-dropdown' => 'dropdown update'
        ];
    }
I've created a widget and it's done
$this->widgetCustomer = $this->createCustomerWidget();
public function createCustomerWidget()
    {
        $config = $this->makeConfig('$/prestasafe/erp/models/customer/fields.yaml');
        $config->alias = 'customer';
        $config->arrayName = 'Customer';
        $config->url = Backend::url('prestasafe/erp/customers/create');
        $config->model = new \Prestasafe\Erp\Models\Customer;
        $widget = $this->makeWidget('Backend\Widgets\Form', $config);
        $widget->bindToController();
        return $widget;
    }
Thanks to you !
1-3 of 3