1

This the error i get : Path '' is not a valid target path (1)

#0 [internal function]: Phalcon\Assets\Manager->output(Object(Phalcon      \Assets\Collection), Array, 'css')
#1 C:\xampp\htdocs\PVO\app\views\index.phtml(17): Phalcon\Assets\Manager->outputCss('header')
#2 [internal function]: unknown()
#3 [internal function]: Phalcon\Mvc\View\Engine\Php->render('C:\\xampp\\htdocs...', Array, true)
#4 [internal function]: Phalcon\Mvc\View->_engineRender(Array, 'index', true, true, NULL)
#5 [internal function]: Phalcon\Mvc\View->render('index', 'index', Array)
#6 C:\xampp\htdocs\PVO\public\index.php(42): Phalcon\Mvc\Application->handle()
#7 {main}

Here is what i have done so far. This is my controllerBase:

<?php

use Phalcon\Mvc\Controller;
use Phalcon\Assets\Filters\Jsmin;
use Phalcon\Assets\Filters\Cssmin;

class ControllerBase extends Controller {

public function onConstruct() {

    $this->assets
            ->useImplicitOutput(false)
            ->collection('footer')
            ->addJs('https://code.jquery.com/jquery-3.2.1.js', false, true)
            ->addFilter(new Jsmin());
    $this->assets
            ->useImplicitOutput(false)
            ->collection('header')
            ->addJs('https://code.jquery.com/jquery-3.2.1.js', false, true)
            ->addFilter(new Jsmin());
    $this->assets
            ->useImplicitOutput(false)
            ->collection('header')
            ->addCss('https://code.jquery.com/jquery-3.2.1.js', false, true)
            ->addFilter(new Cssmin());
}



}

Then this is what im doing in my view.

    <head>

    <!-- Basic -->
    <meta charset="UTF-8">


    <meta name="keywords" content="HTML5 Admin Template" />
    <meta name="description" content="Porto Admin - Responsive HTML5 Template">
    <meta name="author" content="okler.net">

    <!-- Mobile Metas -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

    <!-- Web Fonts  -->

    <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700,800|Shadows+Into+Light" rel="stylesheet" type="text/css">


       <!-- All the Header Css and JS -->
<?php $this->assets->outputCss('header'); ?>
        <?php $this->assets->outputJs('header'); ?>
    </head>

I also made 2 functions in my assetsController called HeaderAction and footerAction which does this:

public function headerAction() {
     $headerCollection = $this->assets->collection('header');
    //Vendor CSS
    $headerCollection->addCss('assets/vendor/bootstrap/css/bootstrap.css');
    $headerCollection->addCss('assets/vendor/font-awesome/css/font-awesome.css');
    $headerCollection->addCss('assets/vendor/magnific-popup/magnific-popup.css');
    $headerCollection->addCss('assets/vendor/bootstrap-datepicker/css/bootstrap-datepicker3.css');
    //Specific Page Vendor CSS
    $headerCollection->addCss('assets/vendor/jquery-ui/jquery-ui.css');
    $headerCollection->addCss('assets/vendor/jquery-ui/jquery-ui.theme.css');
    $headerCollection->addCss('assets/vendor/bootstrap-multiselect/bootstrap-multiselect.css');
    $headerCollection->addCss('assets/vendor/morris.js/morris.css');
    //Theme
    $headerCollection->addCss('assets/stylesheets/theme.css');
    //Theme custom
    $headerCollection->addCss('assets/stylesheets/theme-custom.css');
    //Head libs
    $headerCollection->addJs('assets/vendor/modernizr/modernizr.js');
    $headerCollection->addJs('assets/vendor/style-switcher/style.switcher.localstorage.js');
    //Fullscreen fix
    $headerCollection->addCss('assets/assets/css/fullscreenIframe.css');
}

public function footerAction() {
    $footerCollection = $this->assets->collection('footer');
    //Vendor
    $footerCollection->addJs('assets/vendor/jquery/jquery.js');
    $footerCollection->addJs('assets/vendor/jquery-browser-mobile/jquery.browser.mobile.js');
    $footerCollection->addJs('assets/vendor/jquery-cookie/jquery-cookie.js');
    $footerCollection->addJs('assets/vendor/style-switcher/style.switcher.js');
    $footerCollection->addJs('assets/vendor/bootstrap/js/bootstrap.js');
    $footerCollection->addJs('assets/vendor/nanoscroller/nanoscroller.js');
    $footerCollection->addJs('assets/vendor/bootstrap-datepicker/js/bootstrap-datepicker.js');
    $footerCollection->addJs('assets/vendor/magnific-popup/jquery.magnific-popup.js');
    $footerCollection->addJs('assets/vendor/jquery-placeholder/jquery-placeholder.js');
    //Specific Page Vendor
    $footerCollection->addJs('assets/vendor/jquery-ui/jquery-ui.js');
    $footerCollection->addJs('assets/vendor/jqueryui-touch-punch/jqueryui-touch-punch.js');
    $footerCollection->addJs('assets/vendor/jquery-appear/jquery-appear.js');
    $footerCollection->addJs('assets/vendor/bootstrap-multiselect/bootstrap-multiselect.js');
    $footerCollection->addJs('assets/vendor/jquery.easy-pie-chart/jquery.easy-pie-chart.js');
    $footerCollection->addJs('assets/vendor/flot/jquery.flot.js');
    $footerCollection->addJs('assets/vendor/flot.tooltip/flot.tooltip.js');
    $footerCollection->addJs('assets/vendor/flot/jquery.flot.pie.js');
    $footerCollection->addJs('assets/vendor/flot/jquery.flot.categories.js');
    $footerCollection->addJs('assets/vendor/flot/jquery.flot.resize.js');
    $footerCollection->addJs('assets/vendor/jquery-sparkline/jquery-sparkline.js');
    $footerCollection->addJs('assets/vendor/raphael/raphael.js');
    $footerCollection->addJs('assets/vendor/morris.js/morris.js');
    $footerCollection->addJs('assets/vendor/gauge/gauge.js');
    $footerCollection->addJs('assets/vendor/snap.svg/snap.svg.js');
    $footerCollection->addJs('assets/vendor/liquid-meter/liquid.meter.js');
    $footerCollection->addJs('assets/vendor/jqvmap/jquery.vmap.js');
    $footerCollection->addJs('assets/vendor/jqvmap/data/jquery.vmap.sampledata.js');
    $footerCollection->addJs('assets/vendor/jqvmap/maps/jquery.vmap.world.js');
    $footerCollection->addJs('assets/vendor/jqvmap/maps/continents/jquery.vmap.africa.js');
    $footerCollection->addJs('assets/vendor/jqvmap/maps/continents/jquery.vmap.asia.js');
    $footerCollection->addJs('assets/vendor/jqvmap/maps/continents/jquery.vmap.australia.js');
    $footerCollection->addJs('assets/vendor/jqvmap/maps/continents/jquery.vmap.europe.js');
    $footerCollection->addJs('assets/vendor/jqvmap/maps/continents/jquery.vmap.north-america.js');
    $footerCollection->addJs('assets/vendor/jqvmap/maps/continents/jquery.vmap.south-america.js');
    $footerCollection->addJs('assets/vendor/jquery-ui/jquery-ui.js');
    $footerCollection->addJs('assets/vendor/jqueryui-touch-punch/jqueryui-touch-punch.js');
    $footerCollection->addJs('assets/vendor/jquery-appear/jquery-appear.js');
    $footerCollection->addJs('assets/vendor/bootstrap-multiselect/bootstrap-multiselect.js');
    $footerCollection->addJs('assets/vendor/jquery.easy-pie-chart/jquery.easy-pie-chart.js');
    $footerCollection->addJs('assets/vendor/flot/jquery.flot.js');
    $footerCollection->addJs('assets/vendor/flot.tooltip/flot.tooltip.js');
    $footerCollection->addJs('assets/vendor/flot/jquery.flot.pie.js');
    $footerCollection->addJs('assets/vendor/flot/jquery.flot.resize.js');
    // Theme Base, Components and Settings 
    $footerCollection->addJs('assets/javascripts/theme.js');
    //Theme custom
    $footerCollection->addJs('assets/javascripts/theme.custom.js');
    //Page Head Name
    $footerCollection->addJs('assets/javascripts/page.head.js');
    //Theme Initialization Files
    $footerCollection->addJs('assets/javascripts/theme.init.js');
    // Examples
    $footerCollection->addJs('assets/javascripts/dashboard/examples.dashboard.js');

}

I have no clue why its saying: Path '' is not a valid target path (1).

Marcel
  • 11
  • 2

2 Answers2

0

By default phalcon joins all resources. You need to provide target path for joined resource. You need to use Collection::setTargetPath to set it.

Juri
  • 1,369
  • 10
  • 16
  • Where should I place Collection::setTargetPath – Marcel Oct 26 '17 at 12:30
  • By `Collection::setTargetPath` i meant a method. Not static method. After `->collection()` you need to `->setTargetPath('path here')` – Juri Oct 27 '17 at 13:17
0

As mentioned by Juri, you need to setTargetPath. In your collections (ie. $footerCollection/$headerCollection), add the following :

$footerCollection->setTargetPath("cache/assets/final.js")
                 ->setTargetUri("cache/assets/final.js")
                 ->join(true);
twoTimesAgnew
  • 1,376
  • 1
  • 11
  • 15